Minor cleanup for win32stat.c.

Ensure that CloseHandle() can't clobber the errno we set for
failure exits, and make a couple of tweaks for pgindent.

Juan José Santamaría Flecha

Discussion: https://postgr.es/m/CAC+AXB0g44SbvSpC86o_1HWh8TAU2pZrMRW6tJT-dkijotx5Qg@mail.gmail.com
This commit is contained in:
Tom Lane 2020-10-10 13:39:21 -04:00
parent fe27009cbb
commit c94cfb38c3
1 changed files with 22 additions and 16 deletions

View File

@ -41,13 +41,11 @@ typedef struct _FILE_STANDARD_INFORMATION
* !defined(__MINGW64__) */ * !defined(__MINGW64__) */
typedef NTSTATUS (NTAPI * PFN_NTQUERYINFORMATIONFILE) typedef NTSTATUS (NTAPI * PFN_NTQUERYINFORMATIONFILE)
( (IN HANDLE FileHandle,
IN HANDLE FileHandle,
OUT PIO_STATUS_BLOCK IoStatusBlock, OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID FileInformation, OUT PVOID FileInformation,
IN ULONG Length, IN ULONG Length,
IN FILE_INFORMATION_CLASS FileInformationClass IN FILE_INFORMATION_CLASS FileInformationClass);
);
static PFN_NTQUERYINFORMATIONFILE _NtQueryInformationFile = NULL; static PFN_NTQUERYINFORMATIONFILE _NtQueryInformationFile = NULL;
@ -101,8 +99,8 @@ fileattr_to_unixmode(int attr)
uxmode |= (unsigned short) ((attr & FILE_ATTRIBUTE_DIRECTORY) ? uxmode |= (unsigned short) ((attr & FILE_ATTRIBUTE_DIRECTORY) ?
(_S_IFDIR) : (_S_IFREG)); (_S_IFDIR) : (_S_IFREG));
uxmode |= (unsigned short) (attr & FILE_ATTRIBUTE_READONLY) ? uxmode |= (unsigned short) ((attr & FILE_ATTRIBUTE_READONLY) ?
(_S_IREAD) : (_S_IREAD | _S_IWRITE); (_S_IREAD) : (_S_IREAD | _S_IWRITE));
/* there is no need to simulate _S_IEXEC using CMD's PATHEXT extensions */ /* there is no need to simulate _S_IEXEC using CMD's PATHEXT extensions */
uxmode |= _S_IEXEC; uxmode |= _S_IEXEC;
@ -149,8 +147,8 @@ fileinfo_to_stat(HANDLE hFile, struct stat *buf)
buf->st_mode = fileattr_to_unixmode(fiData.dwFileAttributes); buf->st_mode = fileattr_to_unixmode(fiData.dwFileAttributes);
buf->st_nlink = fiData.nNumberOfLinks; buf->st_nlink = fiData.nNumberOfLinks;
buf->st_size = (((uint64) fiData.nFileSizeHigh) << 32) | buf->st_size = ((((uint64) fiData.nFileSizeHigh) << 32) |
(uint64) fiData.nFileSizeLow; fiData.nFileSizeLowi);
return 0; return 0;
} }
@ -220,8 +218,10 @@ _pgstat64(const char *name, struct stat *buf)
LoadNtdll(); LoadNtdll();
if (ntdll == NULL) if (ntdll == NULL)
{ {
_dosmaperr(GetLastError()); DWORD err = GetLastError();
CloseHandle(hFile); CloseHandle(hFile);
_dosmaperr(err);
return -1; return -1;
} }
@ -229,8 +229,10 @@ _pgstat64(const char *name, struct stat *buf)
GetProcAddress(ntdll, "NtQueryInformationFile"); GetProcAddress(ntdll, "NtQueryInformationFile");
if (_NtQueryInformationFile == NULL) if (_NtQueryInformationFile == NULL)
{ {
_dosmaperr(GetLastError()); DWORD err = GetLastError();
CloseHandle(hFile); CloseHandle(hFile);
_dosmaperr(err);
return -1; return -1;
} }
} }
@ -239,16 +241,20 @@ _pgstat64(const char *name, struct stat *buf)
sizeof(standardInfo), sizeof(standardInfo),
FileStandardInformation))) FileStandardInformation)))
{ {
_dosmaperr(GetLastError()); DWORD err = GetLastError();
CloseHandle(hFile); CloseHandle(hFile);
_dosmaperr(err);
return -1; return -1;
} }
#else #else
if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &standardInfo, if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &standardInfo,
sizeof(standardInfo))) sizeof(standardInfo)))
{ {
_dosmaperr(GetLastError()); DWORD err = GetLastError();
CloseHandle(hFile); CloseHandle(hFile);
_dosmaperr(err);
return -1; return -1;
} }
#endif /* _WIN32_WINNT < 0x0600 */ #endif /* _WIN32_WINNT < 0x0600 */