diff options
author | Ron Yorston <rmy@pobox.com> | 2022-05-23 08:05:13 +0100 |
---|---|---|
committer | Ron Yorston <rmy@pobox.com> | 2022-05-23 08:05:13 +0100 |
commit | 70c17b9fc0b9052b757603f7d139f898eb92606e (patch) | |
tree | 05d2c0ef6a24d19b5adc8c3896e47c5f829c1b7f | |
parent | 09984ea741b455a4f86fe9e2022ae6ae4af9b4c4 (diff) | |
download | busybox-w32-70c17b9fc0b9052b757603f7d139f898eb92606e.tar.gz busybox-w32-70c17b9fc0b9052b757603f7d139f898eb92606e.tar.bz2 busybox-w32-70c17b9fc0b9052b757603f7d139f898eb92606e.zip |
win32: code shrink fstat(2)
Reduce duplicated code. Saves 16-48 bytes.
-rw-r--r-- | win32/mingw.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/win32/mingw.c b/win32/mingw.c index f49d8079d..01d935eb9 100644 --- a/win32/mingw.c +++ b/win32/mingw.c | |||
@@ -745,21 +745,19 @@ int mingw_fstat(int fd, struct mingw_stat *buf) | |||
745 | HANDLE fh = (HANDLE)_get_osfhandle(fd); | 745 | HANDLE fh = (HANDLE)_get_osfhandle(fd); |
746 | BY_HANDLE_FILE_INFORMATION fdata; | 746 | BY_HANDLE_FILE_INFORMATION fdata; |
747 | 747 | ||
748 | if (fh == INVALID_HANDLE_VALUE) { | 748 | if (fh == INVALID_HANDLE_VALUE) |
749 | errno = EBADF; | 749 | goto fail; |
750 | return -1; | 750 | |
751 | } | ||
752 | /* direct non-file handles to MS's fstat() */ | 751 | /* direct non-file handles to MS's fstat() */ |
753 | if (GetFileType(fh) != FILE_TYPE_DISK) { | 752 | if (GetFileType(fh) != FILE_TYPE_DISK) { |
754 | struct _stati64 buf64; | 753 | struct _stati64 buf64; |
755 | 754 | ||
756 | if ( _fstati64(fd, &buf64) != 0 ) { | 755 | if (_fstati64(fd, &buf64) != 0) |
757 | return -1; | 756 | return -1; |
758 | } | 757 | |
759 | buf->st_mode = (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) | 758 | buf->st_mode = (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) |
760 | & ~(current_umask & 0022); | 759 | & ~(current_umask & 0022); |
761 | buf->st_attr = FILE_ATTRIBUTE_NORMAL; | 760 | buf->st_attr = FILE_ATTRIBUTE_NORMAL; |
762 | buf->st_tag = 0; | ||
763 | buf->st_size = buf64.st_size; | 761 | buf->st_size = buf64.st_size; |
764 | buf->st_atim.tv_sec = buf64.st_atime; | 762 | buf->st_atim.tv_sec = buf64.st_atime; |
765 | buf->st_atim.tv_nsec = 0; | 763 | buf->st_atim.tv_nsec = 0; |
@@ -767,7 +765,6 @@ int mingw_fstat(int fd, struct mingw_stat *buf) | |||
767 | buf->st_mtim.tv_nsec = 0; | 765 | buf->st_mtim.tv_nsec = 0; |
768 | buf->st_ctim.tv_sec = buf64.st_ctime; | 766 | buf->st_ctim.tv_sec = buf64.st_ctime; |
769 | buf->st_ctim.tv_nsec = 0; | 767 | buf->st_ctim.tv_nsec = 0; |
770 | buf->st_blocks = ((buf64.st_size+4095)>>12)<<3; | ||
771 | #if ENABLE_FEATURE_EXTRA_FILE_DATA | 768 | #if ENABLE_FEATURE_EXTRA_FILE_DATA |
772 | buf->st_dev = 0; | 769 | buf->st_dev = 0; |
773 | buf->st_ino = 0; | 770 | buf->st_ino = 0; |
@@ -779,13 +776,11 @@ int mingw_fstat(int fd, struct mingw_stat *buf) | |||
779 | if (GetFileInformationByHandle(fh, &fdata)) { | 776 | if (GetFileInformationByHandle(fh, &fdata)) { |
780 | buf->st_mode = file_attr_to_st_mode(fdata.dwFileAttributes); | 777 | buf->st_mode = file_attr_to_st_mode(fdata.dwFileAttributes); |
781 | buf->st_attr = fdata.dwFileAttributes; | 778 | buf->st_attr = fdata.dwFileAttributes; |
782 | buf->st_tag = 0; | ||
783 | buf->st_size = fdata.nFileSizeLow | | 779 | buf->st_size = fdata.nFileSizeLow | |
784 | (((off64_t)fdata.nFileSizeHigh)<<32); | 780 | (((off64_t)fdata.nFileSizeHigh)<<32); |
785 | buf->st_atim = filetime_to_timespec(&(fdata.ftLastAccessTime)); | 781 | buf->st_atim = filetime_to_timespec(&(fdata.ftLastAccessTime)); |
786 | buf->st_mtim = filetime_to_timespec(&(fdata.ftLastWriteTime)); | 782 | buf->st_mtim = filetime_to_timespec(&(fdata.ftLastWriteTime)); |
787 | buf->st_ctim = filetime_to_timespec(&(fdata.ftCreationTime)); | 783 | buf->st_ctim = filetime_to_timespec(&(fdata.ftCreationTime)); |
788 | buf->st_blocks = ((buf->st_size+4095)>>12)<<3; | ||
789 | #if ENABLE_FEATURE_EXTRA_FILE_DATA | 784 | #if ENABLE_FEATURE_EXTRA_FILE_DATA |
790 | buf->st_dev = fdata.dwVolumeSerialNumber; | 785 | buf->st_dev = fdata.dwVolumeSerialNumber; |
791 | buf->st_ino = fdata.nFileIndexLow | | 786 | buf->st_ino = fdata.nFileIndexLow | |
@@ -799,13 +794,15 @@ int mingw_fstat(int fd, struct mingw_stat *buf) | |||
799 | buf->st_ino = 0; | 794 | buf->st_ino = 0; |
800 | buf->st_nlink = (buf->st_attr & FILE_ATTRIBUTE_DIRECTORY) ? 2 : 1; | 795 | buf->st_nlink = (buf->st_attr & FILE_ATTRIBUTE_DIRECTORY) ? 2 : 1; |
801 | #endif | 796 | #endif |
797 | buf->st_tag = 0; | ||
802 | buf->st_rdev = 0; | 798 | buf->st_rdev = 0; |
803 | buf->st_uid = DEFAULT_UID; | 799 | buf->st_uid = DEFAULT_UID; |
804 | buf->st_gid = DEFAULT_GID; | 800 | buf->st_gid = DEFAULT_GID; |
805 | buf->st_blksize = 4096; | 801 | buf->st_blksize = 4096; |
802 | buf->st_blocks = ((buf->st_size+4095)>>12)<<3; | ||
806 | return 0; | 803 | return 0; |
807 | } | 804 | } |
808 | 805 | fail: | |
809 | errno = EBADF; | 806 | errno = EBADF; |
810 | return -1; | 807 | return -1; |
811 | } | 808 | } |