Reset errno and check for errors in readdir().
authorHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 9 Jan 2015 09:19:05 +0000 (11:19 +0200)
committerHeikki Linnakangas <heikki.linnakangas@iki.fi>
Fri, 16 Jan 2015 11:37:07 +0000 (13:37 +0200)
contrib/pg_rewind/copy_fetch.c

index 6b6f8108269d57ed36f5f62aa22bffd9771877d7..90f694a3563ca3ff3d4d6a38948a3ebe2a38384b 100644 (file)
@@ -69,7 +69,7 @@ recurse_dir(const char *datadir, const char *parentpath,
                exit(1);
        }
 
-       while ((xlde = readdir(xldir)) != NULL)
+       while (errno = 0, (xlde = readdir(xldir)) != NULL)
        {
                struct stat fst;
                char            fullpath[MAXPGPATH];
@@ -147,7 +147,19 @@ recurse_dir(const char *datadir, const char *parentpath,
 #endif /* HAVE_READLINK */
                }
        }
-       closedir(xldir);
+
+       if (errno)
+       {
+               fprintf(stderr, "could not read directory \"%s\": %s\n",
+                               fullparentpath, strerror(errno));
+               exit(1);
+       }
+       if (closedir(xldir))
+       {
+               fprintf(stderr, "could not close archive location \"%s\": %s\n",
+                               fullparentpath, strerror(errno));
+               exit(1);
+       }
 }
 
 static int dstfd = -1;