VirtualBox

Ticket #6512: vbox.sf.sol.getattr.patch

File vbox.sf.sol.getattr.patch, 1.6 KB (added by foobar42, 14 years ago)

Fix/improve getattr. This adds missing gid and txt mode bits, and makes getattr report the file type properly.

  • src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c

    diff a/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c
    a b sfprov_get_mode(sfp_mount_t *mnt, char *path, mode_t *mode)  
    420420        else if (RTFS_IS_FILE(info.Attr.fMode))
    421421                m |= S_IFREG;
    422422        else if (RTFS_IS_FIFO(info.Attr.fMode))
    423                 m |= S_IFDIR;
     423                m |= S_IFIFO;
    424424        else if (RTFS_IS_DEV_CHAR(info.Attr.fMode))
    425425                m |= S_IFCHR;
    426426        else if (RTFS_IS_DEV_BLOCK(info.Attr.fMode))
    sfprov_get_mode(sfp_mount_t *mnt, char *path, mode_t *mode)  
    450450                m |= S_IXOTH;
    451451        if (info.Attr.fMode & RTFS_UNIX_ISUID)
    452452                m |= S_ISUID;
     453        if (info.Attr.fMode & RTFS_UNIX_ISGID)
     454                m |= S_ISGID;
     455        if (info.Attr.fMode & RTFS_UNIX_ISTXT)
     456                m |= S_ISVTX;
    453457        *mode = m;
    454458        return (0);
    455459}
  • src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c

    diff a/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c b/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c
    a b sffs_getattr(  
    726726        if (error != 0)
    727727                goto done;
    728728        vap->va_mode = mode & MODEMASK;
     729        if (S_ISDIR(mode))
     730                vap->va_type = VDIR;
     731        else if (S_ISREG(mode))
     732                vap->va_type = VREG;
     733        else if (S_ISFIFO(mode))
     734                vap->va_type = VFIFO;
     735        else if (S_ISCHR(mode))
     736                vap->va_type = VCHR;
     737        else if (S_ISBLK(mode))
     738                vap->va_type = VBLK;
     739        else if (S_ISLNK(mode))
     740                vap->va_type = VLNK;
     741        else if (S_ISSOCK(mode))
     742                vap->va_type = VSOCK;
    729743
    730744        error = sfprov_get_size(node->sf_sffs->sf_handle, node->sf_path, &x);
    731745        if (error == ENOENT)

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