VirtualBox

Changeset 34002 in vbox for trunk/src/VBox/Runtime/r3


Ignore:
Timestamp:
Nov 11, 2010 5:16:37 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
67667
Message:

iprt: Working on tar vfs.

Location:
trunk/src/VBox/Runtime/r3
Files:
6 edited

Legend:

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

    r33540 r34002  
    3737#  define DEV_BSIZE S_BLKSIZE /** @todo bird: add DEV_BSIZE to sys/param.h on OS/2. */
    3838# endif
     39# include <grp.h>
     40# include <pwd.h>
    3941#endif
    4042
     
    192194}
    193195
    194 
    195196#ifndef RT_OS_WINDOWS
     197
    196198/**
    197199 * Internal worker function which setups RTFSOBJINFO based on a UNIX stat struct.
     
    300302    pObjInfo->Attr.u.Unix.Device          = pStat->st_rdev;
    301303}
     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 */
     312void    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 */
     333void 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
    302348#endif /* !RT_OS_WINDOWS */
    303349
  • trunk/src/VBox/Runtime/r3/posix/fileio-posix.cpp

    r33103 r34002  
    658658    switch (enmAdditionalAttribs)
    659659    {
     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
    660673        case RTFSOBJATTRADD_EASIZE:
    661674            pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_EASIZE;
    662675            pObjInfo->Attr.u.EASize.cb            = 0;
    663             break;
    664 
    665         case RTFSOBJATTRADD_NOTHING:
    666         case RTFSOBJATTRADD_UNIX:
    667             /* done */
    668676            break;
    669677
  • trunk/src/VBox/Runtime/r3/posix/path-posix.cpp

    r33602 r34002  
    3939#include <sys/types.h>
    4040#include <pwd.h>
     41#include <grp.h>
    4142
    4243#include <iprt/path.h>
     
    340341            switch (enmAdditionalAttribs)
    341342            {
     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
    342356                case RTFSOBJATTRADD_EASIZE:
    343357                    /** @todo Use SGI extended attribute interface to query EA info. */
    344358                    pObjInfo->Attr.enmAdditional          = RTFSOBJATTRADD_EASIZE;
    345359                    pObjInfo->Attr.u.EASize.cb            = 0;
    346                     break;
    347 
    348                 case RTFSOBJATTRADD_NOTHING:
    349                 case RTFSOBJATTRADD_UNIX:
    350                     Assert(pObjInfo->Attr.enmAdditional == RTFSOBJATTRADD_UNIX);
    351360                    break;
    352361
  • trunk/src/VBox/Runtime/r3/win/dir-win.cpp

    r28918 r34002  
    437437            break;
    438438
     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
    439451        default:
    440452            AssertMsgFailed(("Impossible!\n"));
  • trunk/src/VBox/Runtime/r3/win/fileio-win.cpp

    r33540 r34002  
    680680    switch (enmAdditionalAttribs)
    681681    {
    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;
    685684            break;
    686685
     
    697696            break;
    698697
    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;
    701713            break;
    702714
  • trunk/src/VBox/Runtime/r3/win/path-win.cpp

    r33439 r34002  
    300300    switch (enmAdditionalAttribs)
    301301    {
    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;
    305304            break;
    306305
     
    317316            break;
    318317
    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;
    321333            break;
    322334
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