diff options
Diffstat (limited to 'contrib/pg_upgrade/file.c')
-rw-r--r-- | contrib/pg_upgrade/file.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/contrib/pg_upgrade/file.c b/contrib/pg_upgrade/file.c index 8fdc86d7d47..de23dedbf2b 100644 --- a/contrib/pg_upgrade/file.c +++ b/contrib/pg_upgrade/file.c @@ -291,7 +291,7 @@ pg_scandir_internal(const char *dirname, *namelist = NULL; - while ((direntry = readdir(dirdesc)) != NULL) + while (errno = 0, (direntry = readdir(dirdesc)) != NULL) { /* Invoke the selector function to see if the direntry matches */ if (!selector || (*selector) (direntry)) @@ -324,7 +324,17 @@ pg_scandir_internal(const char *dirname, } } - closedir(dirdesc); +#ifdef WIN32 + /* Bug in old Mingw dirent.c; fixed in mingw-runtime-3.2, 2003-10-10 */ + if (GetLastError() == ERROR_NO_MORE_FILES) + errno = 0; +#endif + + if (errno) + pg_log(PG_FATAL, "could not read directory \"%s\": %s\n", dirname, getErrorText(errno)); + + if (closedir(dirdesc)) + pg_log(PG_FATAL, "could not close directory \"%s\": %s\n", dirname, getErrorText(errno)); return count; } |