Changeset 80524 in vbox for trunk/src/VBox/ImageMounter
- Timestamp:
- Sep 1, 2019 1:17:00 PM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 133031
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/ImageMounter/vboximg-mount/vboximg-mount.cpp
r80519 r80524 23 23 #define LOG_GROUP LOG_GROUP_DEFAULT /** @todo log group */ 24 24 25 #define RTTIME_INCL_TIMESPEC 25 26 #define FUSE_USE_VERSION 27 26 27 #if defined(RT_OS_DARWIN) || defined(RT_OS_LINUX) || defined(RT_OS_FREEBSD) … … 38 39 #include <cstdarg> 39 40 #include <sys/stat.h> 41 #include <sys/time.h> 40 42 #endif 41 43 #if defined(RT_OS_DARWIN) || defined(RT_OS_FREEBSD) || defined(RT_OS_LINUX) … … 76 78 #include <iprt/vfs.h> 77 79 #include <iprt/dvm.h> 80 #include <iprt/time.h> 78 81 79 82 #include "vboximgCrypto.h" … … 87 90 USAGE_FLAG, 88 91 }; 92 93 #if !defined(S_ISTXT) && defined(S_ISVTX) 94 # define S_ISTXT (S_ISVTX) 95 #endif 89 96 90 97 #define VBOX_EXTPACK "Oracle VM VirtualBox Extension Pack" … … 568 575 if (RT_SUCCESS(rcIprt)) 569 576 { 570 switch (RTVfsObjGetType(hVfsObj)) 577 RTFSOBJINFO ObjInfo; 578 579 rcIprt = RTVfsObjQueryInfo(hVfsObj, &ObjInfo, RTFSOBJATTRADD_UNIX); 580 if (RT_SUCCESS(rcIprt)) 571 581 { 572 case RTVFSOBJTYPE_FILE: 582 stbuf->st_size = ObjInfo.cbObject; 583 stbuf->st_nlink = 1; 584 stbuf->st_uid = 0; 585 stbuf->st_gid = 0; 586 587 RTTimeSpecGetTimespec(&ObjInfo.AccessTime, &stbuf->st_atim); 588 RTTimeSpecGetTimespec(&ObjInfo.ModificationTime, &stbuf->st_mtim); 589 RTTimeSpecGetTimespec(&ObjInfo.ChangeTime, &stbuf->st_ctim); 590 /*RTTimeSpecGetTimespec(&ObjInfo.BirthTime, &stbuf->st_birthtime);*/ /* Not existing on Linux. */ 591 592 switch (ObjInfo.Attr.fMode & RTFS_TYPE_MASK) 573 593 { 574 RTVFSFILE hVfsFile = RTVfsObjToFile(hVfsObj); 575 uint64_t cb; 576 rcIprt = RTVfsFileGetSize(hVfsFile, &cb); AssertRC(rcIprt); 577 RTVfsFileRelease(hVfsFile); 578 579 stbuf->st_mode = S_IFREG | 0644; 580 stbuf->st_size = (off_t)cb; 581 stbuf->st_nlink = 1; 582 break; 594 case RTFS_TYPE_FIFO: 595 { 596 stbuf->st_mode = S_IFIFO; 597 break; 598 } 599 case RTFS_TYPE_DEV_CHAR: 600 { 601 stbuf->st_mode = S_IFCHR; 602 break; 603 } 604 case RTFS_TYPE_DIRECTORY: 605 { 606 stbuf->st_mode = S_IFDIR; 607 stbuf->st_nlink = 2; 608 break; 609 } 610 case RTFS_TYPE_DEV_BLOCK: 611 { 612 stbuf->st_mode = S_IFBLK; 613 break; 614 } 615 case RTFS_TYPE_FILE: 616 { 617 stbuf->st_mode = S_IFREG; 618 break; 619 } 620 case RTFS_TYPE_SYMLINK: 621 { 622 stbuf->st_mode = S_IFLNK; 623 break; 624 } 625 case RTFS_TYPE_SOCKET: 626 { 627 stbuf->st_mode = S_IFSOCK; 628 break; 629 } 630 #if 0 /* Not existing on Linux. */ 631 case RTFS_TYPE_WHITEOUT: 632 { 633 stbuf->st_mode = S_IFWHT; 634 break; 635 } 636 #endif 637 default: 638 stbuf->st_mode = 0; 583 639 } 584 case RTVFSOBJTYPE_DIR: 640 641 if (ObjInfo.Attr.fMode & RTFS_UNIX_ISUID) 642 stbuf->st_mode |= S_ISUID; 643 if (ObjInfo.Attr.fMode & RTFS_UNIX_ISGID) 644 stbuf->st_mode |= S_ISGID; 645 if (ObjInfo.Attr.fMode & RTFS_UNIX_ISTXT) 646 stbuf->st_mode |= S_ISTXT; 647 648 /* Owner permissions. */ 649 if (ObjInfo.Attr.fMode & RTFS_UNIX_IRUSR) 650 stbuf->st_mode |= S_IRUSR; 651 if (ObjInfo.Attr.fMode & RTFS_UNIX_IWUSR) 652 stbuf->st_mode |= S_IWUSR; 653 if (ObjInfo.Attr.fMode & RTFS_UNIX_IXUSR) 654 stbuf->st_mode |= S_IXUSR; 655 656 /* Group permissions. */ 657 if (ObjInfo.Attr.fMode & RTFS_UNIX_IRGRP) 658 stbuf->st_mode |= S_IRGRP; 659 if (ObjInfo.Attr.fMode & RTFS_UNIX_IWGRP) 660 stbuf->st_mode |= S_IWGRP; 661 if (ObjInfo.Attr.fMode & RTFS_UNIX_IXGRP) 662 stbuf->st_mode |= S_IXGRP; 663 664 /* Other permissions. */ 665 if (ObjInfo.Attr.fMode & RTFS_UNIX_IROTH) 666 stbuf->st_mode |= S_IROTH; 667 if (ObjInfo.Attr.fMode & RTFS_UNIX_IWOTH) 668 stbuf->st_mode |= S_IWOTH; 669 if (ObjInfo.Attr.fMode & RTFS_UNIX_IXOTH) 670 stbuf->st_mode |= S_IXOTH; 671 672 if (ObjInfo.Attr.enmAdditional == RTFSOBJATTRADD_UNIX) 585 673 { 586 stbuf->st_mode = S_IFDIR | 0755; 587 stbuf->st_nlink = 2; 588 break; 674 stbuf->st_uid = ObjInfo.Attr.u.Unix.uid; 675 stbuf->st_gid = ObjInfo.Attr.u.Unix.gid; 676 stbuf->st_nlink = ObjInfo.Attr.u.Unix.cHardlinks; 677 stbuf->st_ino = ObjInfo.Attr.u.Unix.INodeId; 678 stbuf->st_dev = ObjInfo.Attr.u.Unix.INodeIdDevice; 679 /*stbuf->st_flags = ObjInfo.Attr.u.Unix.fFlags;*/ /* Not existing on Linux. */ 680 /*stbuf->st_gen = ObjInfo.Attr.u.Unix.GenerationId;*/ /* Not existing on Linux. */ 681 stbuf->st_rdev = ObjInfo.Attr.u.Unix.Device; 589 682 } 590 default:591 rc = -EINVAL;592 683 } 593 684 594 stbuf->st_uid = 0;595 stbuf->st_gid = 0;596 685 RTVfsObjRelease(hVfsObj); 597 686 }
Note:
See TracChangeset
for help on using the changeset viewer.