VirtualBox

Changeset 69596 in vbox


Ignore:
Timestamp:
Nov 6, 2017 1:02:12 PM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
118948
Message:

fatvfs.cpp: Split dir and file structures into shared and handle specific parts, like the ifsvfs does. Docs and nits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/fs/fatvfs.cpp

    r69595 r69596  
    123123    RTLISTANCHOR    ListParts;
    124124} RTFSFATCHAIN;
     125/** Pointer to a FAT chain. */
    125126typedef RTFSFATCHAIN *PRTFSFATCHAIN;
     127/** Pointer to a const FAT chain. */
    126128typedef RTFSFATCHAIN const *PCRTFSFATCHAIN;
    127129
    128130
    129131/**
    130  * FAT file system object (common part to files and dirs).
     132 * FAT file system object (common part to files and dirs (shared)).
    131133 */
    132134typedef struct RTFSFATOBJ
     
    160162    bool                fMaybeDirtyDirEnt;
    161163} RTFSFATOBJ;
     164/** Poitner to a FAT file system object. */
    162165typedef RTFSFATOBJ *PRTFSFATOBJ;
    163166
     167/**
     168 * Shared FAT file data.
     169 */
    164170typedef struct RTFSFATFILESHRD
    165171{
     
    167173    RTFSFATOBJ          Core;
    168174} RTFSFATFILESHRD;
     175/** Pointer to shared FAT file data. */
    169176typedef RTFSFATFILESHRD *PRTFSFATFILESHRD;
    170177
    171178
     179/**
     180 * Per handle data for a FAT file.
     181 */
    172182typedef struct RTFSFATFILE
    173183{
     
    177187    uint32_t            offFile;
    178188} RTFSFATFILE;
     189/** Pointer to the per handle data of a FAT file. */
    179190typedef RTFSFATFILE *PRTFSFATFILE;
    180191
    181192
    182193/**
    183  * FAT directory.
     194 * FAT shared directory structure.
    184195 *
    185196 * We work directories in one of two buffering modes.  If there are few entries
     
    242253    } u;
    243254} RTFSFATDIRSHRD;
    244 /** Pointer to a FAT directory instance. */
     255/** Pointer to a shared FAT directory instance. */
    245256typedef RTFSFATDIRSHRD *PRTFSFATDIRSHRD;
    246257
    247258
    248259/**
    249  * FAT directory.
     260 * The per handle FAT directory data.
    250261 */
    251262typedef struct RTFSFATDIR
     
    256267    uint32_t            offDir;
    257268} RTFSFATDIR;
    258 /** Pointer to a FAT directory instance. */
     269/** Pointer to a per handle FAT directory data. */
    259270typedef RTFSFATDIR *PRTFSFATDIR;
    260271
     
    387398    /** The size of the root directory, rounded up to the nearest sector size. */
    388399    uint32_t        cbRootDir;
    389     /** The root directory instance data. */
     400    /** The root directory data (shared). */
    390401    PRTFSFATDIRSHRD pRootDir;
    391402
     
    15661577
    15671578/**
    1568  * @interface_method_impl{RTVFSOBJOPS,pfnClose}
    1569  */
    1570 static DECLCALLBACK(int) rtFsFatFile_Close(void *pvThis)
    1571 {
    1572     PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
    1573     LogFlow(("rtFsFatFile_Close(%p/%p)\n", pThis, pThis->pShared));
    1574 
    1575     PRTFSFATFILESHRD pShared = pThis->pShared;
    1576     pThis->pShared = NULL;
    1577 
    1578     int rc = VINF_SUCCESS;
    1579     if (pShared)
    1580     {
    1581         if (ASMAtomicDecU32(&pShared->Core.cRefs) == 0)
    1582         {
    1583             LogFlow(("rtFsFatFile_Close: Destroying shared structure %p\n", pShared));
    1584             rc = rtFsFatObj_Close(&pShared->Core);
    1585             RTMemFree(pShared);
    1586         }
    1587         else
    1588             rc = rtFsFatObj_FlushMetaData(&pShared->Core);
    1589     }
    1590     return rc;
    1591 }
    1592 
    1593 
    1594 /**
    15951579 * Worker for rtFsFatFile_QueryInfo and rtFsFatDir_QueryInfo
    15961580 */
     
    16401624
    16411625/**
     1626 * Worker for rtFsFatFile_SetMode and rtFsFatDir_SetMode.
     1627 */
     1628static int rtFsFatObj_SetMode(PRTFSFATOBJ pThis, RTFMODE fMode, RTFMODE fMask)
     1629{
     1630#if 0
     1631    if (fMask != ~RTFS_TYPE_MASK)
     1632    {
     1633        fMode |= ~fMask & ObjInfo.Attr.fMode;
     1634    }
     1635#else
     1636    RT_NOREF(pThis, fMode, fMask);
     1637    return VERR_NOT_IMPLEMENTED;
     1638#endif
     1639}
     1640
     1641
     1642/**
     1643 * Worker for rtFsFatFile_SetTimes and rtFsFatDir_SetTimes.
     1644 */
     1645static int rtFsFatObj_SetTimes(PRTFSFATOBJ pThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
     1646                               PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
     1647{
     1648#if 0
     1649    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
     1650#else
     1651    RT_NOREF(pThis, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
     1652    return VERR_NOT_IMPLEMENTED;
     1653#endif
     1654}
     1655
     1656
     1657
     1658
     1659/**
     1660 * @interface_method_impl{RTVFSOBJOPS,pfnClose}
     1661 */
     1662static DECLCALLBACK(int) rtFsFatFile_Close(void *pvThis)
     1663{
     1664    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
     1665    LogFlow(("rtFsFatFile_Close(%p/%p)\n", pThis, pThis->pShared));
     1666
     1667    PRTFSFATFILESHRD pShared = pThis->pShared;
     1668    pThis->pShared = NULL;
     1669
     1670    int rc = VINF_SUCCESS;
     1671    if (pShared)
     1672    {
     1673        if (ASMAtomicDecU32(&pShared->Core.cRefs) == 0)
     1674        {
     1675            LogFlow(("rtFsFatFile_Close: Destroying shared structure %p\n", pShared));
     1676            rc = rtFsFatObj_Close(&pShared->Core);
     1677            RTMemFree(pShared);
     1678        }
     1679        else
     1680            rc = rtFsFatObj_FlushMetaData(&pShared->Core);
     1681    }
     1682    return rc;
     1683}
     1684
     1685
     1686/**
    16421687 * @interface_method_impl{RTVFSOBJOPS,pfnQueryInfo}
    16431688 */
     
    16471692    return rtFsFatObj_QueryInfo(&pThis->pShared->Core, pObjInfo, enmAddAttr);
    16481693}
    1649 
    16501694
    16511695
     
    19491993 * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
    19501994 */
    1951 static DECLCALLBACK(int) rtFsFatObj_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
    1952 {
    1953 #if 0
     1995static DECLCALLBACK(int) rtFsFatFile_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
     1996{
    19541997    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
    1955     if (fMask != ~RTFS_TYPE_MASK)
    1956     {
    1957         fMode |= ~fMask & ObjInfo.Attr.fMode;
    1958     }
    1959 #else
    1960     RT_NOREF(pvThis, fMode, fMask);
    1961     return VERR_NOT_IMPLEMENTED;
    1962 #endif
     1998    return rtFsFatObj_SetMode(&pThis->pShared->Core, fMode, fMask);
    19631999}
    19642000
     
    19672003 * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
    19682004 */
    1969 static DECLCALLBACK(int) rtFsFatObj_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
    1970                                              PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
    1971 {
    1972 #if 0
     2005static DECLCALLBACK(int) rtFsFatFile_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
     2006                                              PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
     2007{
    19732008    PRTFSFATFILE pThis = (PRTFSFATFILE)pvThis;
    1974 #else
    1975     RT_NOREF(pvThis, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
    1976     return VERR_NOT_IMPLEMENTED;
    1977 #endif
     2009    return rtFsFatObj_SetTimes(&pThis->pShared->Core, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
    19782010}
    19792011
     
    19822014 * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
    19832015 */
    1984 static DECLCALLBACK(int) rtFsFatObj_SetOwner(void *pvThis, RTUID uid, RTGID gid)
     2016static DECLCALLBACK(int) rtFsFatFile_SetOwner(void *pvThis, RTUID uid, RTGID gid)
    19852017{
    19862018    RT_NOREF(pvThis, uid, gid);
     
    20682100        RTVFSOBJSETOPS_VERSION,
    20692101        RT_OFFSETOF(RTVFSFILEOPS, Stream.Obj) - RT_OFFSETOF(RTVFSFILEOPS, ObjSet),
    2070         rtFsFatObj_SetMode,
    2071         rtFsFatObj_SetTimes,
    2072         rtFsFatObj_SetOwner,
     2102        rtFsFatFile_SetMode,
     2103        rtFsFatFile_SetTimes,
     2104        rtFsFatFile_SetOwner,
    20732105        RTVFSOBJSETOPS_VERSION
    20742106    },
     
    34883520
    34893521/**
     3522 * @interface_method_impl{RTVFSOBJSETOPS,pfnMode}
     3523 */
     3524static DECLCALLBACK(int) rtFsFatDir_SetMode(void *pvThis, RTFMODE fMode, RTFMODE fMask)
     3525{
     3526    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
     3527    return rtFsFatObj_SetMode(&pThis->pShared->Core, fMode, fMask);
     3528}
     3529
     3530
     3531/**
     3532 * @interface_method_impl{RTVFSOBJSETOPS,pfnSetTimes}
     3533 */
     3534static DECLCALLBACK(int) rtFsFatDir_SetTimes(void *pvThis, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime,
     3535                                             PCRTTIMESPEC pChangeTime, PCRTTIMESPEC pBirthTime)
     3536{
     3537    PRTFSFATDIR pThis = (PRTFSFATDIR)pvThis;
     3538    return rtFsFatObj_SetTimes(&pThis->pShared->Core, pAccessTime, pModificationTime, pChangeTime, pBirthTime);
     3539}
     3540
     3541
     3542/**
     3543 * @interface_method_impl{RTVFSOBJSETOPS,pfnSetOwner}
     3544 */
     3545static DECLCALLBACK(int) rtFsFatDir_SetOwner(void *pvThis, RTUID uid, RTGID gid)
     3546{
     3547    RT_NOREF(pvThis, uid, gid);
     3548    return VERR_NOT_SUPPORTED;
     3549}
     3550
     3551
     3552/**
    34903553 * @interface_method_impl{RTVFSOBJOPS,pfnTraversalOpen}
    34913554 */
     
    37383801        RTVFSOBJSETOPS_VERSION,
    37393802        RT_OFFSETOF(RTVFSDIROPS, Obj) - RT_OFFSETOF(RTVFSDIROPS, ObjSet),
    3740         rtFsFatObj_SetMode,
    3741         rtFsFatObj_SetTimes,
    3742         rtFsFatObj_SetOwner,
     3803        rtFsFatDir_SetMode,
     3804        rtFsFatDir_SetTimes,
     3805        rtFsFatDir_SetOwner,
    37433806        RTVFSOBJSETOPS_VERSION
    37443807    },
Note: See TracChangeset for help on using the changeset viewer.

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