Changeset 855
- Timestamp:
- 08/21/08 21:50:51 (3 years ago)
- Files:
-
- 1 modified
-
Whitix/trunk/fs/vfs/file.c (modified) (10 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/trunk/fs/vfs/file.c
r701 r855 48 48 return; 49 49 50 vNode->aTime=currTime; 51 SetVNodeDirty(vNode); 50 /* TODO: Check granularity of vNode times on disk. No point dirtying a vNode if 51 * the time isn't updated. */ 52 53 if (vNode->aTime.seconds < currTime.seconds) 54 { 55 vNode->aTime=currTime; 56 SetVNodeDirty(vNode); 57 } 52 58 } 53 59 … … 74 80 return; 75 81 76 vNode->mTime=currTime;77 78 82 /* Has the vNode just been created? If so, record its 79 83 creation time */ … … 81 85 vNode->cTime=currTime; 82 86 83 SetVNodeDirty(vNode); 87 /* See VfsFileAccessed comment. */ 88 if (vNode->mTime.seconds < currTime.seconds || create) 89 { 90 vNode->mTime=currTime; 91 SetVNodeDirty(vNode); 92 } 84 93 } 85 94 … … 123 132 readSize=MIN(bytesPerSec-readOffset,size); 124 133 125 res=file->vNode->vNodeOps->blockMap(vNode,file->position / bytesPerSec );134 res=file->vNode->vNodeOps->blockMap(vNode,file->position / bytesPerSec, 0); 126 135 127 136 if (res == -1) … … 146 155 copyOffset+=readSize; 147 156 file->position+=readSize; 157 148 158 BlockFree(buff); 149 159 } 150 160 161 #if 0 151 162 /* Read in the next few sectors, as part of read-ahead */ 152 163 readOffset=((file->position + bytesPerSec-1) & ~(bytesPerSec-1)); 153 164 readOffset /= bytesPerSec; 154 165 155 res=file->vNode->vNodeOps->blockMap(vNode, readOffset );166 res=file->vNode->vNodeOps->blockMap(vNode, readOffset, 0); 156 167 157 168 if (res > 0) … … 159 170 BlockReadAhead(vNode->superBlock->sDevice, res); 160 171 161 res=file->vNode->vNodeOps->blockMap(vNode, readOffset+1 );172 res=file->vNode->vNodeOps->blockMap(vNode, readOffset+1, 0); 162 173 163 174 if (res > 0) 164 175 BlockReadAhead(vNode->superBlock->sDevice, res); 165 176 } 177 #endif 166 178 167 179 IrqRestoreFlags(flags); … … 180 192 while (size > 0) 181 193 { 182 res=file->vNode->vNodeOps->blockMap(file->vNode, file->position/BYTES_PER_SECTOR(file->vNode->superBlock) );194 res=file->vNode->vNodeOps->blockMap(file->vNode, file->position/BYTES_PER_SECTOR(file->vNode->superBlock), VFS_MAP_CREATE); 183 195 184 196 /* Could not find block? Deal with this better. */ 185 if (res == -1)197 if (res < 0) 186 198 return -EIO; 187 199 … … 276 288 file->fileOps=file->vNode->fileOps; 277 289 278 if (file->fileOps ->open)290 if (file->fileOps && file->fileOps->open) 279 291 { 280 292 err=file->fileOps->open(file); … … 390 402 int DoCloseFile(struct File* file) 391 403 { 392 DWORD flags;393 394 404 if (!file || !file->vNode) 395 405 return -EFAULT; … … 564 574 return -EBADF; 565 575 566 if (VirtCheckArea((void*)buffer, amount,VER_WRITE))576 if (VirtCheckArea((void*)buffer, amount, VER_WRITE)) 567 577 return -EFAULT; 578 568 579 return DoReadFile(file,buffer,amount); 569 580 }
