VirtualBox

Changeset 39278 in vbox for trunk/src/VBox/Additions


Ignore:
Timestamp:
Nov 11, 2011 5:05:17 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
74828
Message:

Additions/solaris/SharedFolders: Consolidate volinfo calls into one fsinfo.

Location:
trunk/src/VBox/Additions/solaris/SharedFolders
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.c

    r39270 r39278  
    173173 */
    174174int
    175 sfprov_get_blksize(sfp_mount_t *mnt, uint64_t *blksize)
     175sfprov_get_fsinfo(sfp_mount_t *mnt, sffs_fsinfo_t *fsinfo)
    176176{
    177177        int rc;
     
    183183        if (RT_FAILURE(rc))
    184184                return (EINVAL);
    185         *blksize = info.ulBytesPerAllocationUnit;
    186         return (0);
    187 }
    188 
    189 int
    190 sfprov_get_blksused(sfp_mount_t *mnt, uint64_t *blksused)
    191 {
    192         int rc;
    193         SHFLVOLINFO info;
    194         uint32_t bytes = sizeof(SHFLVOLINFO);
    195 
    196         rc = vboxCallFSInfo(&vbox_client, &mnt->map, 0,
    197             (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (SHFLDIRINFO *)&info);
    198         if (RT_FAILURE(rc))
    199                 return (EINVAL);
    200         *blksused = (info.ullTotalAllocationBytes -
    201             info.ullAvailableAllocationBytes) / info.ulBytesPerAllocationUnit;
    202         return (0);
    203 }
    204 
    205 int
    206 sfprov_get_blksavail(sfp_mount_t *mnt, uint64_t *blksavail)
    207 {
    208         int rc;
    209         SHFLVOLINFO info;
    210         uint32_t bytes = sizeof(SHFLVOLINFO);
    211 
    212         rc = vboxCallFSInfo(&vbox_client, &mnt->map, 0,
    213             (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (SHFLDIRINFO *)&info);
    214         if (RT_FAILURE(rc))
    215                 return (EINVAL);
    216         *blksavail =
    217             info.ullAvailableAllocationBytes / info.ulBytesPerAllocationUnit;
    218         return (0);
    219 }
    220 
    221 int
    222 sfprov_get_maxnamesize(sfp_mount_t *mnt, uint32_t *maxnamesize)
    223 {
    224         int rc;
    225         SHFLVOLINFO info;
    226         uint32_t bytes = sizeof(SHFLVOLINFO);
    227 
    228         rc = vboxCallFSInfo(&vbox_client, &mnt->map, 0,
    229             (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (SHFLDIRINFO *)&info);
    230         if (RT_FAILURE(rc))
    231                 return (EINVAL);
    232         *maxnamesize = info.fsProperties.cbMaxComponent;
    233         return (0);
    234 }
    235 
    236 int
    237 sfprov_get_readonly(sfp_mount_t *mnt, uint32_t *readonly)
    238 {
    239         int rc;
    240         SHFLVOLINFO info;
    241         uint32_t bytes = sizeof(SHFLVOLINFO);
    242 
    243         rc = vboxCallFSInfo(&vbox_client, &mnt->map, 0,
    244             (SHFL_INFO_GET | SHFL_INFO_VOLUME), &bytes, (SHFLDIRINFO *)&info);
    245         if (RT_FAILURE(rc))
    246                 return (EINVAL);
    247         *readonly = info.fsProperties.fReadOnly;
     185
     186        fsinfo->blksize = info.ulBytesPerAllocationUnit;
     187        fsinfo->blksused = (info.ullTotalAllocationBytes - info.ullAvailableAllocationBytes) / info.ulBytesPerAllocationUnit;
     188        fsinfo->blksavail = info.ullAvailableAllocationBytes / info.ulBytesPerAllocationUnit;
     189        fsinfo->maxnamesize = info.fsProperties.cbMaxComponent;
     190        fsinfo->readonly = info.fsProperties.fReadOnly;
    248191        return (0);
    249192}
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h

    r39270 r39278  
    7272 * query information about a mounted file system
    7373 */
    74 extern int sfprov_get_blksize(sfp_mount_t *, uint64_t *);
    75 extern int sfprov_get_blksused(sfp_mount_t *, uint64_t *);
    76 extern int sfprov_get_blksavail(sfp_mount_t *, uint64_t *);
    77 extern int sfprov_get_maxnamesize(sfp_mount_t *, uint32_t *);
    78 extern int sfprov_get_readonly(sfp_mount_t *, uint32_t *);
     74typedef struct sffs_fsinfo {
     75        uint64_t blksize;
     76        uint64_t blksused;
     77        uint64_t blksavail;
     78        uint32_t maxnamesize;
     79        uint32_t readonly;
     80} sffs_fsinfo_t;
     81
     82extern int sfprov_get_fsinfo(sfp_mount_t *, sffs_fsinfo_t *);
    7983
    8084/*
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c

    r39270 r39278  
    526526{
    527527        sffs_data_t *sffs = (sffs_data_t *)vfsp->vfs_data;
    528         uint64_t x;
    529         uint32_t u;
     528        sffs_fsinfo_t fsinfo;
    530529        dev32_t d32;
    531530        int error;
    532531
    533532        bzero(sbp, sizeof(*sbp));
    534         error = sfprov_get_blksize(sffs->sf_handle, &x);
     533        error = sfprov_get_fsinfo(sffs->sf_handle, &fsinfo);
    535534        if (error != 0)
    536535                return (error);
    537         sbp->f_bsize = x;
    538         sbp->f_frsize = x;
    539 
    540         error = sfprov_get_blksavail(sffs->sf_handle, &x);
    541         if (error != 0)
    542                 return (error);
    543         sbp->f_bfree = x;
    544         sbp->f_bavail = x;
    545         sbp->f_files = x / 4;   /* some kind of reasonable value */
    546         sbp->f_ffree = x / 4;
    547         sbp->f_favail = x / 4;
    548 
    549         error = sfprov_get_blksused(sffs->sf_handle, &x);
    550         if (error != 0)
    551                 return (error);
    552         sbp->f_blocks = x + sbp->f_bavail;
     536
     537        sbp->f_bsize = fsinfo.blksize;
     538        sbp->f_frsize = fsinfo.blksize;
     539
     540        sbp->f_bfree = fsinfo.blksavail;
     541        sbp->f_bavail = fsinfo.blksavail;
     542        sbp->f_files = fsinfo.blksavail / 4; /* some kind of reasonable value */
     543        sbp->f_ffree = fsinfo.blksavail / 4;
     544        sbp->f_favail = fsinfo.blksavail / 4;
     545
     546        sbp->f_blocks = fsinfo.blksused + sbp->f_bavail;
    553547
    554548        (void) cmpldev(&d32, vfsp->vfs_dev);
     
    557551        sbp->f_flag |= ST_NOSUID;
    558552
    559         error = sfprov_get_readonly(sffs->sf_handle, &u);
    560         if (error != 0)
    561                 return (error);
    562         if (u)
     553        if (fsinfo.readonly)
    563554                sbp->f_flag |= ST_RDONLY;
    564555
    565         error = sfprov_get_maxnamesize(sffs->sf_handle, &u);
    566         if (error != 0)
    567                 return (error);
    568         sbp->f_namemax = u;
     556        sbp->f_namemax = fsinfo.maxnamesize;
    569557        return (0);
    570558}
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