mirror of
https://github.com/postgres/postgres.git
synced 2025-05-03 22:24:49 +03:00
On Win32, use loop to create pg_dump temporary tar file in the current
directory, not in device root, for permission reasons. Backpatch to 8.1.X.
This commit is contained in:
parent
560feb474a
commit
fe491fb9af
@ -16,7 +16,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.52 2006/06/07 22:24:44 momjian Exp $
|
* $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_tar.c,v 1.53 2006/06/27 01:16:58 momjian Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -359,7 +359,35 @@ tarOpen(ArchiveHandle *AH, const char *filename, char mode)
|
|||||||
{
|
{
|
||||||
tm = calloc(1, sizeof(TAR_MEMBER));
|
tm = calloc(1, sizeof(TAR_MEMBER));
|
||||||
|
|
||||||
|
#ifndef WIN32
|
||||||
tm->tmpFH = tmpfile();
|
tm->tmpFH = tmpfile();
|
||||||
|
#else
|
||||||
|
/*
|
||||||
|
* On WIN32, tmpfile() generates a filename in the root directory,
|
||||||
|
* which requires administrative permissions on certain systems.
|
||||||
|
* Loop until we find a unique file name we can create.
|
||||||
|
*/
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
name = _tempnam(NULL, "pg_temp_");
|
||||||
|
if (name == NULL)
|
||||||
|
break;
|
||||||
|
fd = open(name, O_RDWR | O_CREAT | O_EXCL | O_BINARY |
|
||||||
|
O_TEMPORARY, S_IREAD | S_IWRITE);
|
||||||
|
free(name);
|
||||||
|
|
||||||
|
if (fd != -1) /* created a file */
|
||||||
|
{
|
||||||
|
tm->tmpFH = fdopen(fd, "w+b");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (errno != EEXIST) /* failure other than file exists */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (tm->tmpFH == NULL)
|
if (tm->tmpFH == NULL)
|
||||||
die_horribly(AH, modulename, "could not generate temporary file name: %s\n", strerror(errno));
|
die_horribly(AH, modulename, "could not generate temporary file name: %s\n", strerror(errno));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user