提交 bb17a98e 编写于 作者: B Bruce Momjian

Print file name and errno string on rmtree failure.

Backpatch to 8.0.X.
上级 c6521b1b
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Win32 (NT, Win2k, XP). replace() doesn't work on Win95/98/Me. * Win32 (NT, Win2k, XP). replace() doesn't work on Win95/98/Me.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/port/dirmod.c,v 1.34 2004/12/31 22:03:53 pgsql Exp $ * $PostgreSQL: pgsql/src/port/dirmod.c,v 1.35 2005/02/13 16:50:44 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -350,6 +350,7 @@ fnames(char *path) ...@@ -350,6 +350,7 @@ fnames(char *path)
return filenames; return filenames;
} }
/* /*
* fnames_cleanup * fnames_cleanup
* *
...@@ -366,6 +367,7 @@ fnames_cleanup(char **filenames) ...@@ -366,6 +367,7 @@ fnames_cleanup(char **filenames)
pfree(filenames); pfree(filenames);
} }
/* /*
* rmtree * rmtree
* *
...@@ -398,16 +400,14 @@ rmtree(char *path, bool rmtopdir) ...@@ -398,16 +400,14 @@ rmtree(char *path, bool rmtopdir)
snprintf(filepath, MAXPGPATH, "%s/%s", path, *filename); snprintf(filepath, MAXPGPATH, "%s/%s", path, *filename);
if (stat(filepath, &statbuf) != 0) if (stat(filepath, &statbuf) != 0)
{ goto report_and_fail;
fnames_cleanup(filenames);
return false;
}
if (S_ISDIR(statbuf.st_mode)) if (S_ISDIR(statbuf.st_mode))
{ {
/* call ourselves recursively for a directory */ /* call ourselves recursively for a directory */
if (!rmtree(filepath, true)) if (!rmtree(filepath, true))
{ {
/* we already reported the error */
fnames_cleanup(filenames); fnames_cleanup(filenames);
return false; return false;
} }
...@@ -415,22 +415,26 @@ rmtree(char *path, bool rmtopdir) ...@@ -415,22 +415,26 @@ rmtree(char *path, bool rmtopdir)
else else
{ {
if (unlink(filepath) != 0) if (unlink(filepath) != 0)
{ goto report_and_fail;
fnames_cleanup(filenames);
return false;
}
} }
} }
if (rmtopdir) if (rmtopdir)
{ {
if (rmdir(path) != 0) if (rmdir(path) != 0)
{ goto report_and_fail;
fnames_cleanup(filenames);
return false;
}
} }
fnames_cleanup(filenames); fnames_cleanup(filenames);
return true; return true;
report_and_fail:
#ifndef FRONTEND
elog(WARNING, "could not remove file or directory \"%s\": %m", filepath);
#else
fprintf(stderr, "could not remove file or directory \"%s\": %s\n", filepath, strerror(errno));
#endif
fnames_cleanup(filenames);
return false;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册