Changeset 34002 in vbox for trunk/src/VBox/Runtime
- Timestamp:
- Nov 11, 2010 5:16:37 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 67667
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 2 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/Makefile.kmk
r33982 r34002 372 372 common/vfs/vfsstdfile.cpp \ 373 373 common/zip/tar.cpp \ 374 common/zip/tarvfs.cpp \ 374 375 common/zip/zip.cpp \ 375 376 common/zip/zipgzip.cpp \ -
trunk/src/VBox/Runtime/common/vfs/vfsbase.cpp
r33979 r34002 68 68 /** The max number of symbolic links to resolve in a path. */ 69 69 #define RTVFS_MAX_LINKS 20U 70 71 72 /** Asserts that the VFS base object vtable is valid. */ 73 #define RTVFSOBJ_ASSERT_OPS(pObj, enmTypeArg) \ 74 do \ 75 { \ 76 Assert((pObj)->uVersion == RTVFSOBJOPS_VERSION); \ 77 Assert((pObj)->enmType == (enmTypeArg) || (enmTypeArg) == RTVFSOBJTYPE_INVALID); \ 78 AssertPtr((pObj)->pszName); \ 79 Assert(*(pObj)->pszName); \ 80 AssertPtr((pObj)->pfnClose); \ 81 AssertPtr((pObj)->pfnQueryInfo); \ 82 Assert((pObj)->uEndMarker == RTVFSOBJOPS_VERSION); \ 83 } while (0) 84 85 /** Asserts that the VFS I/O stream vtable is valid. */ 86 #define RTVFSIOSTREAM_ASSERT_OPS(pIoStreamOps, enmTypeArg) \ 87 do { \ 88 RTVFSOBJ_ASSERT_OPS(&(pIoStreamOps)->Obj, enmTypeArg); \ 89 Assert((pIoStreamOps)->uVersion == RTVFSIOSTREAMOPS_VERSION); \ 90 Assert(!(pIoStreamOps)->fReserved); \ 91 AssertPtr((pIoStreamOps)->pfnRead); \ 92 AssertPtr((pIoStreamOps)->pfnWrite); \ 93 AssertPtr((pIoStreamOps)->pfnFlush); \ 94 AssertPtr((pIoStreamOps)->pfnPollOne); \ 95 AssertPtr((pIoStreamOps)->pfnTell); \ 96 AssertPtrNull((pIoStreamOps)->pfnSkip); \ 97 AssertPtrNull((pIoStreamOps)->pfnZeroFill); \ 98 Assert((pIoStreamOps)->uEndMarker == RTVFSIOSTREAMOPS_VERSION); \ 99 } while (0) 70 100 71 101 … … 1095 1125 PRTVFSFSSTREAM phVfsFss, void **ppvInstance) 1096 1126 { 1097 return VERR_NOT_IMPLEMENTED; 1127 /* 1128 * Validate the input, be extra strict in strict builds. 1129 */ 1130 AssertPtr(pFsStreamOps); 1131 AssertReturn(pFsStreamOps->uVersion == RTVFSFSSTREAMOPS_VERSION, VERR_VERSION_MISMATCH); 1132 AssertReturn(pFsStreamOps->uEndMarker == RTVFSFSSTREAMOPS_VERSION, VERR_VERSION_MISMATCH); 1133 Assert(!pFsStreamOps->fReserved); 1134 RTVFSOBJ_ASSERT_OPS(&pFsStreamOps->Obj, RTVFSOBJTYPE_FS_STREAM); 1135 AssertPtr(pFsStreamOps->pfnNext); 1136 Assert(cbInstance > 0); 1137 AssertPtr(ppvInstance); 1138 AssertPtr(phVfsFss); 1139 1140 RTVFSINTERNAL *pVfs = NULL; 1141 if (hVfs != NIL_RTVFS) 1142 { 1143 pVfs = hVfs; 1144 AssertPtrReturn(pVfs, VERR_INVALID_HANDLE); 1145 AssertReturn(pVfs->uMagic == RTVFS_MAGIC, VERR_INVALID_HANDLE); 1146 } 1147 1148 /* 1149 * Allocate the handle + instance data. 1150 */ 1151 size_t const cbThis = RT_ALIGN_Z(sizeof(RTVFSFSSTREAMINTERNAL), RTVFS_INST_ALIGNMENT) 1152 + RT_ALIGN_Z(cbInstance, RTVFS_INST_ALIGNMENT); 1153 RTVFSFSSTREAMINTERNAL *pThis = (RTVFSFSSTREAMINTERNAL *)RTMemAllocZ(cbThis); 1154 if (!pThis) 1155 return VERR_NO_MEMORY; 1156 1157 pThis->uMagic = RTVFSFSSTREAM_MAGIC; 1158 pThis->fFlags = RTFILE_O_READ | RTFILE_O_OPEN | RTFILE_O_DENY_NONE; 1159 pThis->pOps = pFsStreamOps; 1160 pThis->Base.uMagic = RTVFSOBJ_MAGIC; 1161 pThis->Base.pvThis = (char *)pThis + RT_ALIGN_Z(sizeof(*pThis), RTVFS_INST_ALIGNMENT); 1162 pThis->Base.pOps = &pFsStreamOps->Obj; 1163 pThis->Base.hSemRW = hSemRW != NIL_RTSEMRW ? hSemRW : pVfs ? pVfs->Base.hSemRW : NIL_RTSEMRW; 1164 pThis->Base.hVfs = hVfs; 1165 pThis->Base.cRefs = 1; 1166 if (hVfs != NIL_RTVFS) 1167 rtVfsObjRetainVoid(&pVfs->Base); 1168 1169 *phVfsFss = pThis; 1170 *ppvInstance = pThis->Base.pvThis; 1171 return VINF_SUCCESS; 1098 1172 } 1099 1173 … … 1233 1307 AssertReturn(pIoStreamOps->uEndMarker == RTVFSIOSTREAMOPS_VERSION, VERR_VERSION_MISMATCH); 1234 1308 Assert(!pIoStreamOps->fReserved); 1309 RTVFSIOSTREAM_ASSERT_OPS(pIoStreamOps, RTVFSOBJTYPE_IO_STREAM); 1235 1310 Assert(cbInstance > 0); 1236 1311 Assert(fOpen & RTFILE_O_ACCESS_MASK); … … 1539 1614 AssertReturn(pFileOps->uEndMarker == RTVFSFILEOPS_VERSION, VERR_VERSION_MISMATCH); 1540 1615 Assert(!pFileOps->fReserved); 1616 RTVFSIOSTREAM_ASSERT_OPS(&pFileOps->Stream, RTVFSOBJTYPE_FILE); 1541 1617 Assert(cbInstance > 0); 1542 1618 Assert(fOpen & RTFILE_O_ACCESS_MASK); -
trunk/src/VBox/Runtime/common/zip/tar.cpp
r33982 r34002 30 30 ******************************************************************************/ 31 31 #include "internal/iprt.h" 32 #include "internal/magics.h"33 32 #include <iprt/tar.h> 34 33 … … 40 39 #include <iprt/path.h> 41 40 #include <iprt/string.h> 41 42 #include "internal/magics.h" 42 43 43 44 -
trunk/src/VBox/Runtime/common/zip/zipgzip.cpp
r33973 r34002 341 341 int rc; 342 342 343 NOREF(fBlocking);344 343 if (!pThis->fDecompress) 345 344 return VERR_ACCESS_DENIED; -
trunk/src/VBox/Runtime/include/internal/fs.h
r28800 r34002 43 43 #ifndef RT_OS_WINDOWS 44 44 void rtFsConvertStatToObjInfo(PRTFSOBJINFO pObjInfo, const struct stat *pStat, const char *pszName, unsigned cbName); 45 void rtFsObjInfoAttrSetUnixOwner(PRTFSOBJINFO pObjInfo, RTUID uid); 46 void rtFsObjInfoAttrSetUnixGroup(PRTFSOBJINFO pObjInfo, RTUID gid); 45 47 #endif 46 48 -
trunk/src/VBox/Runtime/r3/fs.cpp
r33540 r34002 37 37 # define DEV_BSIZE S_BLKSIZE /** @todo bird: add DEV_BSIZE to sys/param.h on OS/2. */ 38 38 # endif 39 # include <grp.h> 40 # include <pwd.h> 39 41 #endif 40 42 … … 192 194 } 193 195 194 195 196 #ifndef RT_OS_WINDOWS 197 196 198 /** 197 199 * Internal worker function which setups RTFSOBJINFO based on a UNIX stat struct. … … 300 302 pObjInfo->Attr.u.Unix.Device = pStat->st_rdev; 301 303 } 304 305 306 /** 307 * Set user-owner additional attributes. 308 * 309 * @param pObjInfo The object info to fill add attrs for. 310 * @param uid The user id. 311 */ 312 void rtFsObjInfoAttrSetUnixOwner(PRTFSOBJINFO pObjInfo, RTUID uid) 313 { 314 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_UNIX_OWNER; 315 pObjInfo->Attr.u.UnixOwner.uid = uid; 316 pObjInfo->Attr.u.UnixOwner.szName[0] = '\0'; 317 318 char achBuf[_4K]; 319 struct passwd Pwd; 320 struct passwd *pPwd; 321 int rc = getpwuid_r(uid, &Pwd, achBuf, sizeof(achBuf), &pPwd); 322 if (!rc && pPwd) 323 RTStrCopy(pObjInfo->Attr.u.UnixOwner.szName, sizeof(pObjInfo->Attr.u.UnixOwner.szName), pPwd->pw_name); 324 } 325 326 327 /** 328 * Set user-group additional attributes. 329 * 330 * @param pObjInfo The object info to fill add attrs for. 331 * @param gid The group id. 332 */ 333 void rtFsObjInfoAttrSetUnixGroup(PRTFSOBJINFO pObjInfo, RTUID gid) 334 { 335 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_UNIX_GROUP; 336 pObjInfo->Attr.u.UnixGroup.gid = gid; 337 pObjInfo->Attr.u.UnixGroup.szName[0] = '\0'; 338 339 char achBuf[_4K]; 340 struct group Grp; 341 struct group *pGrp; 342 343 int rc = getgrgid_r(gid, &Grp, achBuf, sizeof(achBuf), &pGrp); 344 if (!rc && pGrp) 345 RTStrCopy(pObjInfo->Attr.u.UnixGroup.szName, sizeof(pObjInfo->Attr.u.UnixGroup.szName), pGrp->gr_name); 346 } 347 302 348 #endif /* !RT_OS_WINDOWS */ 303 349 -
trunk/src/VBox/Runtime/r3/posix/fileio-posix.cpp
r33103 r34002 658 658 switch (enmAdditionalAttribs) 659 659 { 660 case RTFSOBJATTRADD_NOTHING: 661 case RTFSOBJATTRADD_UNIX: 662 /* done */ 663 break; 664 665 case RTFSOBJATTRADD_UNIX_OWNER: 666 rtFsObjInfoAttrSetUnixOwner(pObjInfo, Stat.st_uid); 667 break; 668 669 case RTFSOBJATTRADD_UNIX_GROUP: 670 rtFsObjInfoAttrSetUnixGroup(pObjInfo, Stat.st_gid); 671 break; 672 660 673 case RTFSOBJATTRADD_EASIZE: 661 674 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_EASIZE; 662 675 pObjInfo->Attr.u.EASize.cb = 0; 663 break;664 665 case RTFSOBJATTRADD_NOTHING:666 case RTFSOBJATTRADD_UNIX:667 /* done */668 676 break; 669 677 -
trunk/src/VBox/Runtime/r3/posix/path-posix.cpp
r33602 r34002 39 39 #include <sys/types.h> 40 40 #include <pwd.h> 41 #include <grp.h> 41 42 42 43 #include <iprt/path.h> … … 340 341 switch (enmAdditionalAttribs) 341 342 { 343 case RTFSOBJATTRADD_NOTHING: 344 case RTFSOBJATTRADD_UNIX: 345 Assert(pObjInfo->Attr.enmAdditional == RTFSOBJATTRADD_UNIX); 346 break; 347 348 case RTFSOBJATTRADD_UNIX_OWNER: 349 rtFsObjInfoAttrSetUnixOwner(pObjInfo, Stat.st_uid); 350 break; 351 352 case RTFSOBJATTRADD_UNIX_GROUP: 353 rtFsObjInfoAttrSetUnixGroup(pObjInfo, Stat.st_gid); 354 break; 355 342 356 case RTFSOBJATTRADD_EASIZE: 343 357 /** @todo Use SGI extended attribute interface to query EA info. */ 344 358 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_EASIZE; 345 359 pObjInfo->Attr.u.EASize.cb = 0; 346 break;347 348 case RTFSOBJATTRADD_NOTHING:349 case RTFSOBJATTRADD_UNIX:350 Assert(pObjInfo->Attr.enmAdditional == RTFSOBJATTRADD_UNIX);351 360 break; 352 361 -
trunk/src/VBox/Runtime/r3/win/dir-win.cpp
r28918 r34002 437 437 break; 438 438 439 case RTFSOBJATTRADD_UNIX_OWNER: 440 pDirEntry->Info.Attr.enmAdditional = RTFSOBJATTRADD_UNIX_OWNER; 441 pDirEntry->Info.Attr.u.UnixOwner.uid = ~0U; 442 pDirEntry->Info.Attr.u.UnixOwner.szName[0] = '\0'; /** @todo return something sensible here. */ 443 break; 444 445 case RTFSOBJATTRADD_UNIX_GROUP: 446 pDirEntry->Info.Attr.enmAdditional = RTFSOBJATTRADD_UNIX_GROUP; 447 pDirEntry->Info.Attr.u.UnixGroup.gid = ~0U; 448 pDirEntry->Info.Attr.u.UnixGroup.szName[0] = '\0'; 449 break; 450 439 451 default: 440 452 AssertMsgFailed(("Impossible!\n")); -
trunk/src/VBox/Runtime/r3/win/fileio-win.cpp
r33540 r34002 680 680 switch (enmAdditionalAttribs) 681 681 { 682 case RTFSOBJATTRADD_EASIZE: 683 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_EASIZE; 684 pObjInfo->Attr.u.EASize.cb = 0; 682 case RTFSOBJATTRADD_NOTHING: 683 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_NOTHING; 685 684 break; 686 685 … … 697 696 break; 698 697 699 case RTFSOBJATTRADD_NOTHING: 700 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_NOTHING; 698 case RTFSOBJATTRADD_UNIX_OWNER: 699 pObjInfo->Info.Attr.enmAdditional = RTFSOBJATTRADD_UNIX_OWNER; 700 pObjInfo->Info.Attr.u.UnixOwner.uid = ~0U; 701 pObjInfo->Info.Attr.u.UnixOwner.szName[0] = '\0'; /** @todo return something sensible here. */ 702 break; 703 704 case RTFSOBJATTRADD_UNIX_GROUP: 705 pObjInfo->Info.Attr.enmAdditional = RTFSOBJATTRADD_UNIX_GROUP; 706 pObjInfo->Info.Attr.u.UnixGroup.gid = ~0U; 707 pObjInfo->Info.Attr.u.UnixGroup.szName[0] = '\0'; 708 break; 709 710 case RTFSOBJATTRADD_EASIZE: 711 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_EASIZE; 712 pObjInfo->Attr.u.EASize.cb = 0; 701 713 break; 702 714 -
trunk/src/VBox/Runtime/r3/win/path-win.cpp
r33439 r34002 300 300 switch (enmAdditionalAttribs) 301 301 { 302 case RTFSOBJATTRADD_EASIZE: 303 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_EASIZE; 304 pObjInfo->Attr.u.EASize.cb = 0; 302 case RTFSOBJATTRADD_NOTHING: 303 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_NOTHING; 305 304 break; 306 305 … … 317 316 break; 318 317 319 case RTFSOBJATTRADD_NOTHING: 320 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_NOTHING; 318 case RTFSOBJATTRADD_UNIX_OWNER: 319 pObjInfo->Info.Attr.enmAdditional = RTFSOBJATTRADD_UNIX_OWNER; 320 pObjInfo->Info.Attr.u.UnixOwner.uid = ~0U; 321 pObjInfo->Info.Attr.u.UnixOwner.szName[0] = '\0'; /** @todo return something sensible here. */ 322 break; 323 324 case RTFSOBJATTRADD_UNIX_GROUP: 325 pObjInfo->Info.Attr.enmAdditional = RTFSOBJATTRADD_UNIX_GROUP; 326 pObjInfo->Info.Attr.u.UnixGroup.gid = ~0U; 327 pObjInfo->Info.Attr.u.UnixGroup.szName[0] = '\0'; 328 break; 329 330 case RTFSOBJATTRADD_EASIZE: 331 pObjInfo->Attr.enmAdditional = RTFSOBJATTRADD_EASIZE; 332 pObjInfo->Attr.u.EASize.cb = 0; 321 333 break; 322 334
Note:
See TracChangeset
for help on using the changeset viewer.