diff --git a/src/port/win32stat.c b/src/port/win32stat.c
index a70df3a..92c2e66 100644
--- a/src/port/win32stat.c
+++ b/src/port/win32stat.c
@@ -101,8 +101,8 @@ fileattr_to_unixmode(int attr)
 	uxmode |= (unsigned short) ((attr & FILE_ATTRIBUTE_DIRECTORY) ?
 								(_S_IFDIR) : (_S_IFREG));
 
-	uxmode |= (unsigned short) (attr & FILE_ATTRIBUTE_READONLY) ?
-		(_S_IREAD) : (_S_IREAD | _S_IWRITE);
+	uxmode |= (unsigned short) ((attr & FILE_ATTRIBUTE_READONLY) ?
+								(_S_IREAD) : (_S_IREAD | _S_IWRITE));
 
 	/* there is no need to simulate _S_IEXEC using CMD's PATHEXT extensions */
 	uxmode |= _S_IEXEC;
@@ -149,8 +149,8 @@ fileinfo_to_stat(HANDLE hFile, struct stat *buf)
 	buf->st_mode = fileattr_to_unixmode(fiData.dwFileAttributes);
 	buf->st_nlink = fiData.nNumberOfLinks;
 
-	buf->st_size = (((uint64) fiData.nFileSizeHigh) << 32) |
-		(uint64) fiData.nFileSizeLow;
+	buf->st_size = ((((uint64) fiData.nFileSizeHigh) << 32) |
+					fiData.nFileSizeLowi);
 
 	return 0;
 }
@@ -188,7 +188,13 @@ _pgstat64(const char *name, struct stat *buf)
 	/* fast not-exists check */
 	if (GetFileAttributes(name) == INVALID_FILE_ATTRIBUTES)
 	{
-		_dosmaperr(GetLastError());
+		DWORD		err = GetLastError();
+
+		/* report when not ERROR_SUCCESS */
+		if (err == ERROR_FILE_NOT_FOUND || err == ERROR_PATH_NOT_FOUND)
+			errno = ENOENT;
+		else
+			_dosmaperr(err);
 		return -1;
 	}
 
@@ -220,8 +226,10 @@ _pgstat64(const char *name, struct stat *buf)
 		LoadNtdll();
 		if (ntdll == NULL)
 		{
-			_dosmaperr(GetLastError());
+			DWORD		err = GetLastError();
+
 			CloseHandle(hFile);
+			_dosmaperr(err);
 			return -1;
 		}
 
@@ -229,8 +237,10 @@ _pgstat64(const char *name, struct stat *buf)
 			GetProcAddress(ntdll, "NtQueryInformationFile");
 		if (_NtQueryInformationFile == NULL)
 		{
-			_dosmaperr(GetLastError());
+			DWORD		err = GetLastError();
+
 			CloseHandle(hFile);
+			_dosmaperr(err);
 			return -1;
 		}
 	}
@@ -239,16 +249,20 @@ _pgstat64(const char *name, struct stat *buf)
 											sizeof(standardInfo),
 											FileStandardInformation)))
 	{
-		_dosmaperr(GetLastError());
+		DWORD		err = GetLastError();
+
 		CloseHandle(hFile);
+		_dosmaperr(err);
 		return -1;
 	}
 #else
 	if (!GetFileInformationByHandleEx(hFile, FileStandardInfo, &standardInfo,
 									  sizeof(standardInfo)))
 	{
-		_dosmaperr(GetLastError());
+		DWORD		err = GetLastError();
+
 		CloseHandle(hFile);
+		_dosmaperr(err);
 		return -1;
 	}
 #endif							/* _WIN32_WINNT < 0x0600 */
