aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRon Yorston <rmy@pobox.com>2022-05-23 08:05:13 +0100
committerRon Yorston <rmy@pobox.com>2022-05-23 08:05:13 +0100
commit70c17b9fc0b9052b757603f7d139f898eb92606e (patch)
tree05d2c0ef6a24d19b5adc8c3896e47c5f829c1b7f
parent09984ea741b455a4f86fe9e2022ae6ae4af9b4c4 (diff)
downloadbusybox-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.c19
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}