VirtualBox

Ignore:
Timestamp:
Mar 2, 2023 1:52:48 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
156138
Message:

Guest Control: Specify the directory reading parameters (additional attributes + reading flags) when opening the directory calls, not on every directory entry read. Should save a few bytes on every read. bugref:9783

Location:
trunk/src/VBox/Additions/common/VBoxService
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControl.h

    r98817 r98818  
    8080    /** Context ID. */
    8181    uint32_t                        uContextID;
     82    /** Flags for reading directory entries. */
     83    uint32_t                        fRead;
     84    /** Additional attributes enumeration to use for reading directory entries. */
     85    GSTCTLFSOBJATTRADD              enmReadAttrAdd;
    8286} VBOXSERVICECTRLDIR;
    8387/** Pointer to a guest directory. */
  • trunk/src/VBox/Additions/common/VBoxService/VBoxServiceControlSession.cpp

    r98817 r98818  
    10151015    AssertPtrReturn(pHostCtx, VERR_INVALID_POINTER);
    10161016
    1017     char            szPath[RTPATH_MAX];
    1018     uint32_t        fFlags;
    1019     GSTCTLDIRFILTER enmFilter;
    1020     uint32_t        uHandle = 0;
    1021     int rc = VbglR3GuestCtrlDirGetOpen(pHostCtx, szPath, sizeof(szPath), &fFlags, &enmFilter);
     1017    char               szPath[RTPATH_MAX];
     1018    uint32_t           fFlags;
     1019    GSTCTLDIRFILTER    enmFilter;
     1020    uint32_t           uHandle = 0;
     1021    uint32_t           fReadFlags;
     1022    GSTCTLFSOBJATTRADD enmAttrAdd;
     1023    int rc = VbglR3GuestCtrlDirGetOpen(pHostCtx, szPath, sizeof(szPath), &fFlags, &enmFilter, &enmAttrAdd, &fReadFlags);
    10221024    VGSvcVerbose(4, "[Dir %s]: fFlags=%#x, enmFilter=%#x, rc=%Rrc\n", szPath, fFlags, enmFilter, rc);
    10231025    if (RT_SUCCESS(rc))
     
    10311033            if (!pDir->pszPathAbs)
    10321034                rc = VERR_NO_MEMORY;
     1035
     1036            /* Save reading parameters for subsequent directory entry read calls later. */
     1037            pDir->fRead          = fReadFlags;
     1038            pDir->enmReadAttrAdd = enmAttrAdd;
    10331039
    10341040            if (RT_SUCCESS(rc))
     
    11381144    uint32_t           uHandle;
    11391145    size_t             cbDirEntry = 0;
    1140     GSTCTLFSOBJATTRADD enmAttrAdd;
    1141     uint32_t           fFlags;
    11421146    GSTCTLDIRENTRYEX   DirEntryEx;
    1143     int rc = VbglR3GuestCtrlDirGetRead(pHostCtx, &uHandle, (uint32_t *)&cbDirEntry, (uint32_t *)&enmAttrAdd, &fFlags);
     1147    int rc = VbglR3GuestCtrlDirGetRead(pHostCtx, &uHandle, (uint32_t *)&cbDirEntry);
    11441148    if (RT_SUCCESS(rc))
    11451149    {
     
    11621166            PRTDIRENTRYEX pDirEntryExRuntime = (PRTDIRENTRYEX)&DirEntryEx;
    11631167
    1164             rc = RTDirReadEx(pDir->hDir, pDirEntryExRuntime, &cbDirEntry, (RTFSOBJATTRADD)enmAttrAdd, fFlags);
     1168            rc = RTDirReadEx(pDir->hDir, pDirEntryExRuntime, &cbDirEntry, (RTFSOBJATTRADD)pDir->enmReadAttrAdd, pDir->fRead);
    11651169
    11661170            /* Paranoia. */
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