mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Print file name and errno string on rmtree failure.
Backpatch to 8.0.X.
This commit is contained in:
@ -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)
|
|||||||
return filenames;
|
return filenames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fnames_cleanup
|
* fnames_cleanup
|
||||||
*
|
*
|
||||||
@ -366,6 +367,7 @@ fnames_cleanup(char **filenames)
|
|||||||
pfree(filenames);
|
pfree(filenames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* rmtree
|
* rmtree
|
||||||
*
|
*
|
||||||
@ -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)
|
|||||||
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;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user