- Timestamp:
- 10/14/08 19:36:08 (1 month ago)
- Files:
-
- 1 modified
-
Whitix/branches/keobject/fs/vfs/file.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/branches/keobject/fs/vfs/file.c
r1061 r1130 142 142 return -EIO; 143 143 } 144 144 145 145 buff=BlockRead(vNode->superBlock->sDevice, res); 146 146 … … 157 157 file->position+=readSize; 158 158 159 BlockFree(buff);159 // BlockFree(buff); 160 160 } 161 161 … … 321 321 err=file->fileOps->read(file,buffer,size); 322 322 VfsFileAccessed(file->vNode); 323 323 324 return err; 324 325 } … … 365 366 int DoSeekFile(struct File* file,int distance,int whence) 366 367 { 368 int temp=-1; 369 367 370 if (file->vNode->mode & VFS_ATTR_DIR) 368 371 return -EISDIR; … … 374 377 { 375 378 case 0: /* SEEK_SET */ 376 file->position=distance;379 temp=distance; 377 380 break; 378 381 379 382 case 1: /* SEEK_CUR */ 380 file->position+=distance;383 temp = file->position+distance; 381 384 break; 382 385 383 386 case 2: /* SEEK_END */ 384 file->position=file->vNode->size-distance; 387 if (!file->vNode) 388 return -EINVAL; 389 temp =file->vNode->size - distance; 385 390 break; 391 392 default: 393 KePrint("Invalid, %d\n", whence); 394 return -EINVAL; 386 395 } 387 396 } 397 398 if (temp < 0) 399 return -EINVAL; 400 401 if (temp != file->position) 402 file->position = temp; /* May want to adjust readahead at this point */ 388 403 389 404 return file->position; … … 540 555 struct File file; 541 556 557 /* FIXME: Should we allocate a fd this early? */ 542 558 fd=VfsGetFreeFd(current); 543 559 … … 572 588 */ 573 589 574 int SysRead(int fd, BYTE* buffer,DWORD amount)590 int SysRead(int fd, BYTE* buffer, DWORD amount) 575 591 { 576 592 struct File* file=FileGet(fd); … … 598 614 return -EFAULT; 599 615 616 // KePrint("SysWrite(%d, %#X, %#X)\n", fd, data, amount); 617 600 618 return DoWriteFile(file,data,amount); 601 619 } … … 721 739 } 722 740 741 /* TODO: Create sync function for file operations. */ 723 742 int SysFileSync(int fd) 724 743 { … … 729 748 730 749 VNodeWrite(file->vNode); 750 731 751 return BlockSyncDevice(file->vNode->superBlock->sDevice); 732 752 } … … 753 773 err=file->vNode->vNodeOps->truncate(file->vNode,length); 754 774 if (!err) 775 { 755 776 file->vNode->size=length; 777 778 if (file->position > length) 779 file->position = length; 780 } 756 781 }else 757 782 err=-ENOTIMPL; … … 775 800 if (UNLIKELY(!file)) 776 801 return -EBADF; 777 802 778 803 return DoSeekFile(file,distance,whence); 779 804 }
