Changeset 39278 in vbox for trunk/src/VBox/Additions
- Timestamp:
- Nov 11, 2011 5:05:17 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 74828
- 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 173 173 */ 174 174 int 175 sfprov_get_ blksize(sfp_mount_t *mnt, uint64_t *blksize)175 sfprov_get_fsinfo(sfp_mount_t *mnt, sffs_fsinfo_t *fsinfo) 176 176 { 177 177 int rc; … … 183 183 if (RT_FAILURE(rc)) 184 184 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; 248 191 return (0); 249 192 } -
trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_prov.h
r39270 r39278 72 72 * query information about a mounted file system 73 73 */ 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 *); 74 typedef 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 82 extern int sfprov_get_fsinfo(sfp_mount_t *, sffs_fsinfo_t *); 79 83 80 84 /* -
trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vfs.c
r39270 r39278 526 526 { 527 527 sffs_data_t *sffs = (sffs_data_t *)vfsp->vfs_data; 528 uint64_t x; 529 uint32_t u; 528 sffs_fsinfo_t fsinfo; 530 529 dev32_t d32; 531 530 int error; 532 531 533 532 bzero(sbp, sizeof(*sbp)); 534 error = sfprov_get_ blksize(sffs->sf_handle, &x);533 error = sfprov_get_fsinfo(sffs->sf_handle, &fsinfo); 535 534 if (error != 0) 536 535 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; 553 547 554 548 (void) cmpldev(&d32, vfsp->vfs_dev); … … 557 551 sbp->f_flag |= ST_NOSUID; 558 552 559 error = sfprov_get_readonly(sffs->sf_handle, &u); 560 if (error != 0) 561 return (error); 562 if (u) 553 if (fsinfo.readonly) 563 554 sbp->f_flag |= ST_RDONLY; 564 555 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; 569 557 return (0); 570 558 }
Note:
See TracChangeset
for help on using the changeset viewer.