summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/port/pgcheckdir.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/port/pgcheckdir.c b/src/port/pgcheckdir.c
index 3a2a34cbc61..f2fffe56243 100644
--- a/src/port/pgcheckdir.c
+++ b/src/port/pgcheckdir.c
@@ -31,6 +31,7 @@ pg_check_dir(const char *dir)
int result = 1;
DIR *chkdir;
struct dirent *file;
+ int readdir_errno;
chkdir = opendir(dir);
@@ -58,8 +59,15 @@ pg_check_dir(const char *dir)
errno = 0;
#endif
- if (errno || closedir(chkdir))
+ if (errno)
result = -1; /* some kind of I/O error? */
+ /* Close chkdir and avoid overwriting the readdir errno on success */
+ readdir_errno = errno;
+ if (closedir(chkdir))
+ result = -1; /* error executing closedir */
+ else
+ errno = readdir_errno;
+
return result;
}