From 70c17b9fc0b9052b757603f7d139f898eb92606e Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Mon, 23 May 2022 08:05:13 +0100 Subject: win32: code shrink fstat(2) Reduce duplicated code. Saves 16-48 bytes. --- win32/mingw.c | 19 ++++++++----------- 1 file 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) HANDLE fh = (HANDLE)_get_osfhandle(fd); BY_HANDLE_FILE_INFORMATION fdata; - if (fh == INVALID_HANDLE_VALUE) { - errno = EBADF; - return -1; - } + if (fh == INVALID_HANDLE_VALUE) + goto fail; + /* direct non-file handles to MS's fstat() */ if (GetFileType(fh) != FILE_TYPE_DISK) { struct _stati64 buf64; - if ( _fstati64(fd, &buf64) != 0 ) { + if (_fstati64(fd, &buf64) != 0) return -1; - } + buf->st_mode = (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH) & ~(current_umask & 0022); buf->st_attr = FILE_ATTRIBUTE_NORMAL; - buf->st_tag = 0; buf->st_size = buf64.st_size; buf->st_atim.tv_sec = buf64.st_atime; buf->st_atim.tv_nsec = 0; @@ -767,7 +765,6 @@ int mingw_fstat(int fd, struct mingw_stat *buf) buf->st_mtim.tv_nsec = 0; buf->st_ctim.tv_sec = buf64.st_ctime; buf->st_ctim.tv_nsec = 0; - buf->st_blocks = ((buf64.st_size+4095)>>12)<<3; #if ENABLE_FEATURE_EXTRA_FILE_DATA buf->st_dev = 0; buf->st_ino = 0; @@ -779,13 +776,11 @@ int mingw_fstat(int fd, struct mingw_stat *buf) if (GetFileInformationByHandle(fh, &fdata)) { buf->st_mode = file_attr_to_st_mode(fdata.dwFileAttributes); buf->st_attr = fdata.dwFileAttributes; - buf->st_tag = 0; buf->st_size = fdata.nFileSizeLow | (((off64_t)fdata.nFileSizeHigh)<<32); buf->st_atim = filetime_to_timespec(&(fdata.ftLastAccessTime)); buf->st_mtim = filetime_to_timespec(&(fdata.ftLastWriteTime)); buf->st_ctim = filetime_to_timespec(&(fdata.ftCreationTime)); - buf->st_blocks = ((buf->st_size+4095)>>12)<<3; #if ENABLE_FEATURE_EXTRA_FILE_DATA buf->st_dev = fdata.dwVolumeSerialNumber; buf->st_ino = fdata.nFileIndexLow | @@ -799,13 +794,15 @@ int mingw_fstat(int fd, struct mingw_stat *buf) buf->st_ino = 0; buf->st_nlink = (buf->st_attr & FILE_ATTRIBUTE_DIRECTORY) ? 2 : 1; #endif + buf->st_tag = 0; buf->st_rdev = 0; buf->st_uid = DEFAULT_UID; buf->st_gid = DEFAULT_GID; buf->st_blksize = 4096; + buf->st_blocks = ((buf->st_size+4095)>>12)<<3; return 0; } - + fail: errno = EBADF; return -1; } -- cgit v1.2.3-55-g6feb