diff --git a/src/port/dirent.c b/src/port/dirent.c
index 7a91450695..191fd062a5 100644
--- a/src/port/dirent.c
+++ b/src/port/dirent.c
@@ -83,7 +83,13 @@ readdir(DIR *d)
 		d->handle = FindFirstFile(d->dirname, &fd);
 		if (d->handle == INVALID_HANDLE_VALUE)
 		{
-			errno = ENOENT;
+			if (GetLastError() == ERROR_FILE_NOT_FOUND)
+			{
+				/* No files at all, force errno=0 (unlike mingw) */
+				errno = 0;
+				return NULL;
+			}
+			_dosmaperr(GetLastError());
 			return NULL;
 		}
 	}
@@ -93,7 +99,7 @@ readdir(DIR *d)
 		{
 			if (GetLastError() == ERROR_NO_MORE_FILES)
 			{
-				/* No more files, force errno=0 (unlike mingw) */
+				/* No more files, force errno=0 (like mingw) */
 				errno = 0;
 				return NULL;
 			}
