Changeset 69977 in vbox for trunk/src/VBox/Runtime/common/vfs
- Timestamp:
- Dec 7, 2017 1:02:36 PM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 119483
- Location:
- trunk/src/VBox/Runtime/common/vfs
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/common/vfs/vfsbase.cpp
r69955 r69977 4196 4196 4197 4197 4198 RTDECL(int) RTVfsFileSetSize(RTVFSFILE hVfsFile, uint64_t cbSize, uint32_t fFlags) 4199 { 4200 RTVFSFILEINTERNAL *pThis = hVfsFile; 4201 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 4202 AssertReturn(pThis->uMagic == RTVFSFILE_MAGIC, VERR_INVALID_HANDLE); 4203 AssertReturn(RTVFSFILE_SIZE_F_IS_VALID(fFlags), VERR_INVALID_FLAGS); 4204 AssertReturn(pThis->Stream.fFlags & RTFILE_O_WRITE, VERR_ACCESS_DENIED); 4205 4206 int rc; 4207 if (pThis->pOps->pfnSetSize) 4208 { 4209 RTVfsLockAcquireWrite(pThis->Stream.Base.hLock); 4210 rc = pThis->pOps->pfnSetSize(pThis->Stream.Base.pvThis, cbSize, fFlags); 4211 RTVfsLockReleaseWrite(pThis->Stream.Base.hLock); 4212 } 4213 else 4214 rc = VERR_WRITE_PROTECT; 4215 return rc; 4216 } 4217 4218 4219 RTDECL(RTFOFF) RTVfsFileGetMaxSize(RTVFSFILE hVfsFile) 4220 { 4221 uint64_t cbMax; 4222 int rc = RTVfsFileQueryMaxSize(hVfsFile, &cbMax); 4223 return RT_SUCCESS(rc) ? (RTFOFF)RT_MIN(cbMax, (uint64_t)RTFOFF_MAX) : -1; 4224 } 4225 4226 4227 RTDECL(int) RTVfsFileQueryMaxSize(RTVFSFILE hVfsFile, uint64_t *pcbMax) 4228 { 4229 RTVFSFILEINTERNAL *pThis = hVfsFile; 4230 AssertPtrReturn(pThis, VERR_INVALID_HANDLE); 4231 AssertReturn(pThis->uMagic == RTVFSFILE_MAGIC, VERR_INVALID_HANDLE); 4232 AssertPtrReturn(pcbMax, VERR_INVALID_POINTER); 4233 *pcbMax = RTFOFF_MAX; 4234 4235 int rc; 4236 if (pThis->pOps->pfnQueryMaxSize) 4237 { 4238 RTVfsLockAcquireWrite(pThis->Stream.Base.hLock); 4239 rc = pThis->pOps->pfnQueryMaxSize(pThis->Stream.Base.pvThis, pcbMax); 4240 RTVfsLockReleaseWrite(pThis->Stream.Base.hLock); 4241 } 4242 else 4243 rc = VERR_WRITE_PROTECT; 4244 return rc; 4245 } 4246 4247 4198 4248 RTDECL(uint64_t) RTVfsFileGetOpenFlags(RTVFSFILE hVfsFile) 4199 4249 { -
trunk/src/VBox/Runtime/common/vfs/vfsmemory.cpp
r69942 r69977 676 676 PRTVFSMEMFILE pThis = (PRTVFSMEMFILE)pvThis; 677 677 *pcbFile = pThis->Base.ObjInfo.cbObject; 678 return VINF_SUCCESS; 679 } 680 681 682 /** 683 * @interface_method_impl{RTVFSFILEOPS,pfnSetSize} 684 */ 685 static DECLCALLBACK(int) rtVfsMemFile_SetSize(void *pvThis, uint64_t cbFile, uint32_t fFlags) 686 { 687 NOREF(pvThis); NOREF(cbFile); NOREF(fFlags); 688 AssertMsgFailed(("Lucky you! You get to implement this (or bug bird about it).\n")); 689 return VERR_NOT_IMPLEMENTED; 690 } 691 692 693 /** 694 * @interface_method_impl{RTVFSFILEOPS,pfnQueryMaxSize} 695 */ 696 static DECLCALLBACK(int) rtVfsMemFile_QueryMaxSize(void *pvThis, uint64_t *pcbMax) 697 { 698 RT_NOREF(pvThis); 699 *pcbMax = ~(size_t)0 >> 1; 678 700 return VINF_SUCCESS; 679 701 } … … 717 739 rtVfsMemFile_Seek, 718 740 rtVfsMemFile_QuerySize, 741 rtVfsMemFile_SetSize, 742 rtVfsMemFile_QueryMaxSize, 719 743 RTVFSFILEOPS_VERSION 720 744 }; -
trunk/src/VBox/Runtime/common/vfs/vfsprogress.cpp
r69219 r69977 404 404 return RTVfsFileGetSize(pThis->hVfsFile, pcbFile); 405 405 } 406 407 408 /** 409 * @interface_method_impl{RTVFSFILEOPS,pfnSetSize} 410 */ 411 static DECLCALLBACK(int) rtVfsProgressFile_SetSize(void *pvThis, uint64_t cbFile, uint32_t fFlags) 412 { 413 PRTVFSPROGRESSFILE pThis = (PRTVFSPROGRESSFILE)pvThis; 414 return RTVfsFileSetSize(pThis->hVfsFile, cbFile, fFlags); 415 } 416 417 418 /** 419 * @interface_method_impl{RTVFSFILEOPS,pfnQueryMaxSize} 420 */ 421 static DECLCALLBACK(int) rtVfsProgressFile_QueryMaxSize(void *pvThis, uint64_t *pcbMax) 422 { 423 PRTVFSPROGRESSFILE pThis = (PRTVFSPROGRESSFILE)pvThis; 424 return RTVfsFileQueryMaxSize(pThis->hVfsFile, pcbMax); 425 } 426 406 427 407 428 … … 443 464 rtVfsProgressFile_Seek, 444 465 rtVfsProgressFile_QuerySize, 466 rtVfsProgressFile_SetSize, 467 rtVfsProgressFile_QueryMaxSize, 445 468 RTVFSFILEOPS_VERSION 446 469 }; -
trunk/src/VBox/Runtime/common/vfs/vfsreadahead.cpp
r69111 r69977 486 486 RTCritSectEnter(&pThis->IoCritSect); /* paranoia */ 487 487 int rc = RTVfsFileGetSize(pThis->hFile, pcbFile); 488 RTCritSectLeave(&pThis->IoCritSect); 489 490 return rc; 491 } 492 493 494 /** 495 * @interface_method_impl{RTVFSFILEOPS,pfnSetSize} 496 */ 497 static DECLCALLBACK(int) rtVfsReadAhead_SetSize(void *pvThis, uint64_t cbFile, uint32_t fFlags) 498 { 499 PRTVFSREADAHEAD pThis = (PRTVFSREADAHEAD)pvThis; 500 AssertReturn(pThis->hFile != NIL_RTVFSFILE, VERR_NOT_SUPPORTED); 501 502 RTCritSectEnter(&pThis->IoCritSect); /* paranoia */ 503 int rc = RTVfsFileSetSize(pThis->hFile, cbFile, fFlags); 504 RTCritSectLeave(&pThis->IoCritSect); 505 506 return rc; 507 } 508 509 510 /** 511 * @interface_method_impl{RTVFSFILEOPS,pfnQueryMaxSize} 512 */ 513 static DECLCALLBACK(int) rtVfsReadAhead_QueryMaxSize(void *pvThis, uint64_t *pcbMax) 514 { 515 PRTVFSREADAHEAD pThis = (PRTVFSREADAHEAD)pvThis; 516 AssertReturn(pThis->hFile != NIL_RTVFSFILE, VERR_NOT_SUPPORTED); 517 518 RTCritSectEnter(&pThis->IoCritSect); /* paranoia */ 519 int rc = RTVfsFileQueryMaxSize(pThis->hFile, pcbMax); 488 520 RTCritSectLeave(&pThis->IoCritSect); 489 521 … … 555 587 rtVfsReadAhead_Seek, 556 588 rtVfsReadAhead_QuerySize, 589 rtVfsReadAhead_SetSize, 590 rtVfsReadAhead_QueryMaxSize, 557 591 RTVFSFILEOPS_VERSION 558 592 }; -
trunk/src/VBox/Runtime/common/vfs/vfsstdfile.cpp
r69592 r69977 384 384 PRTVFSSTDFILE pThis = (PRTVFSSTDFILE)pvThis; 385 385 return RTFileGetSize(pThis->hFile, pcbFile); 386 } 387 388 389 /** 390 * @interface_method_impl{RTVFSFILEOPS,pfnSetSize} 391 */ 392 static DECLCALLBACK(int) rtVfsStdFile_SetSize(void *pvThis, uint64_t cbFile, uint32_t fFlags) 393 { 394 PRTVFSSTDFILE pThis = (PRTVFSSTDFILE)pvThis; 395 switch (fFlags & RTVFSFILE_SIZE_F_ACTION_MASK) 396 { 397 case RTVFSFILE_SIZE_F_NORMAL: 398 return RTFileSetSize(pThis->hFile, cbFile); 399 case RTVFSFILE_SIZE_F_GROW: 400 return RTFileSetAllocationSize(pThis->hFile, cbFile, RTFILE_ALLOC_SIZE_F_DEFAULT); 401 case RTVFSFILE_SIZE_F_GROW_KEEP_SIZE: 402 return RTFileSetAllocationSize(pThis->hFile, cbFile, RTFILE_ALLOC_SIZE_F_KEEP_SIZE); 403 default: 404 return VERR_NOT_SUPPORTED; 405 } 406 } 407 408 409 /** 410 * @interface_method_impl{RTVFSFILEOPS,pfnQueryMaxSize} 411 */ 412 static DECLCALLBACK(int) rtVfsStdFile_QueryMaxSize(void *pvThis, uint64_t *pcbMax) 413 { 414 PRTVFSSTDFILE pThis = (PRTVFSSTDFILE)pvThis; 415 RTFOFF cbMax = 0; 416 int rc = RTFileGetMaxSizeEx(pThis->hFile, &cbMax); 417 if (RT_SUCCESS(rc)) 418 *pcbMax = cbMax; 419 return rc; 386 420 } 387 421 … … 424 458 rtVfsStdFile_Seek, 425 459 rtVfsStdFile_QuerySize, 460 rtVfsStdFile_SetSize, 461 rtVfsStdFile_QueryMaxSize, 426 462 RTVFSFILEOPS_VERSION 427 463 };
Note:
See TracChangeset
for help on using the changeset viewer.