VirtualBox

Ignore:
Timestamp:
May 7, 2020 8:56:01 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
137800
Message:

IPRT: Adding RTZIPTAR_C_UPDATE, RTZipTarFsStreamForFile and RTZipTarFsStreamTruncate. Also added some new VFS functions and changed the fReadOnly argument of RTVfsNewFsStream into RTFILE_O_ACCESS_MASK, so it is possible to specify read+write. Untested. bugref:9699

Location:
trunk/src/VBox/Runtime/common/vfs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/vfs/vfsbase.cpp

    r82968 r84192  
    813813    *ppvInstance = pThis->pvThis;
    814814    return VINF_SUCCESS;
     815}
     816
     817
     818RTDECL(void *) RTVfsObjToPrivate(RTVFSOBJ hVfsObj, PCRTVFSOBJOPS pObjOps)
     819{
     820    RTVFSOBJINTERNAL *pThis = hVfsObj;
     821    AssertPtrReturn(pThis, NULL);
     822    AssertReturn(pThis->uMagic == RTVFSOBJ_MAGIC, NULL);
     823    if (pThis->pOps != pObjOps)
     824        return NULL;
     825    return pThis->pvThis;
    815826}
    816827
     
    22822293
    22832294
    2284 RTDECL(int) RTVfsNewFsStream(PCRTVFSFSSTREAMOPS pFsStreamOps, size_t cbInstance, RTVFS hVfs, RTVFSLOCK hLock, bool fReadOnly,
     2295RTDECL(int) RTVfsNewFsStream(PCRTVFSFSSTREAMOPS pFsStreamOps, size_t cbInstance, RTVFS hVfs, RTVFSLOCK hLock, uint32_t fAccess,
    22852296                             PRTVFSFSSTREAM phVfsFss, void **ppvInstance)
    22862297{
     
    22932304    Assert(!pFsStreamOps->fReserved);
    22942305    RTVFSOBJ_ASSERT_OPS(&pFsStreamOps->Obj, RTVFSOBJTYPE_FS_STREAM);
    2295     if (fReadOnly)
     2306    Assert((fAccess & (RTFILE_O_READ | RTFILE_O_WRITE)) == fAccess);
     2307    Assert(fAccess);
     2308    if (fAccess & RTFILE_O_READ)
    22962309        AssertPtr(pFsStreamOps->pfnNext);
    2297     else
     2310    if (fAccess & RTFILE_O_WRITE)
    22982311    {
    22992312        AssertPtr(pFsStreamOps->pfnAdd);
     
    23242337
    23252338    pThis->uMagic = RTVFSFSSTREAM_MAGIC;
    2326     pThis->fFlags = fReadOnly
    2327                   ? RTFILE_O_READ  | RTFILE_O_OPEN   | RTFILE_O_DENY_NONE
    2328                   : RTFILE_O_WRITE | RTFILE_O_CREATE | RTFILE_O_DENY_ALL;
    23292339    pThis->pOps   = pFsStreamOps;
     2340    pThis->fFlags = fAccess;
     2341    if (fAccess == RTFILE_O_READ)
     2342        pThis->fFlags |= RTFILE_O_OPEN   | RTFILE_O_DENY_NONE;
     2343    else if (fAccess == RTFILE_O_WRITE)
     2344        pThis->fFlags |= RTFILE_O_CREATE | RTFILE_O_DENY_ALL;
     2345    else
     2346        pThis->fFlags |= RTFILE_O_OPEN   | RTFILE_O_DENY_ALL;
    23302347
    23312348    *phVfsFss     = pThis;
     
    32773294
    32783295
     3296RTDECL(void *) RTVfsSymlinkToPrivate(RTVFSSYMLINK hVfsSym, PCRTVFSSYMLINKOPS pSymlinkOps)
     3297{
     3298    RTVFSSYMLINKINTERNAL *pThis = hVfsSym;
     3299    AssertPtrReturn(pThis, NULL);
     3300    AssertReturn(pThis->uMagic == RTVFSSYMLINK_MAGIC, NULL);
     3301    if (pThis->pOps != pSymlinkOps)
     3302        return NULL;
     3303    return pThis->Base.pvThis;
     3304}
     3305
     3306
    32793307RTDECL(uint32_t)    RTVfsSymlinkRetain(RTVFSSYMLINK hVfsSym)
    32803308{
  • trunk/src/VBox/Runtime/common/vfs/vfsfss2dir.cpp

    r82968 r84192  
    311311    PRTVFSFSSWRITE2DIR      pThis;
    312312    RTVFSFSSTREAM           hVfsFss;
    313     int rc = RTVfsNewFsStream(&g_rtVfsFssToDirOps, sizeof(*pThis), NIL_RTVFS, NIL_RTVFSLOCK, false /*fReadOnly*/,
     313    int rc = RTVfsNewFsStream(&g_rtVfsFssToDirOps, sizeof(*pThis), NIL_RTVFS, NIL_RTVFSLOCK, RTFILE_O_WRITE,
    314314                              &hVfsFss, (void **)&pThis);
    315315    if (RT_SUCCESS(rc))
     
    370370                RTVFSFSSTREAM           hVfsFss;
    371371                rc = RTVfsNewFsStream(&g_rtVfsFssToDirOps, RT_UOFFSETOF_DYN(RTVFSFSSWRITE2DIR, szBaseDir[cbBaseDir]),
    372                                       NIL_RTVFS, NIL_RTVFSLOCK, false /*fReadOnly*/, &hVfsFss, (void **)&pThis);
     372                                      NIL_RTVFS, NIL_RTVFSLOCK, RTFILE_O_WRITE, &hVfsFss, (void **)&pThis);
    373373                if (RT_SUCCESS(rc))
    374374                {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette