mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-02 03:31:15 +02:00
Fix things so that fopen's, not only open's, pass FILE_SHARE_DELETE
and other special flags on Windows. May fix intermittent 'Permission denied' errors. Magnus Hagander
This commit is contained in:
parent
f6d7ef08a7
commit
3a6e2ff08a
@ -6,7 +6,7 @@
|
|||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
* Portions Copyright (c) 1994, Regents of the University of California
|
* Portions Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/include/port.h,v 1.96 2006/08/18 15:47:08 momjian Exp $
|
* $PostgreSQL: pgsql/src/include/port.h,v 1.97 2006/08/30 18:06:27 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -264,12 +264,15 @@ extern bool rmtree(char *path, bool rmtopdir);
|
|||||||
|
|
||||||
#if defined(WIN32) && !defined(__CYGWIN__)
|
#if defined(WIN32) && !defined(__CYGWIN__)
|
||||||
|
|
||||||
/* open() replacement to allow delete of held files and passing
|
/* open() and fopen() replacements to allow deletion of open files and
|
||||||
* of special options. */
|
* passing of other special options.
|
||||||
|
*/
|
||||||
extern int pgwin32_open(const char *, int,...);
|
extern int pgwin32_open(const char *, int,...);
|
||||||
|
extern FILE *pgwin32_fopen(const char *, const char *);
|
||||||
|
|
||||||
#ifndef FRONTEND
|
#ifndef FRONTEND
|
||||||
#define open(a,b,c) pgwin32_open(a,b,c)
|
#define open(a,b,c) pgwin32_open(a,b,c)
|
||||||
|
#define fopen(a,b) pgwin32_fopen(a,b)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define popen(a,b) _popen(a,b)
|
#define popen(a,b) _popen(a,b)
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
*
|
*
|
||||||
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
* Portions Copyright (c) 1996-2006, PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $PostgreSQL: pgsql/src/port/open.c,v 1.13 2006/06/25 00:18:24 momjian Exp $
|
* $PostgreSQL: pgsql/src/port/open.c,v 1.14 2006/08/30 18:06:27 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -19,7 +19,6 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
int pgwin32_open(const char *fileName, int fileFlags,...);
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
openFlagsToCreateFileFlags(int openFlags)
|
openFlagsToCreateFileFlags(int openFlags)
|
||||||
@ -112,4 +111,32 @@ pgwin32_open(const char *fileName, int fileFlags,...)
|
|||||||
return fd;
|
return fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FILE *
|
||||||
|
pgwin32_fopen(const char *fileName, const char *mode)
|
||||||
|
{
|
||||||
|
int openmode = 0;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if (strstr(mode, "r+"))
|
||||||
|
openmode |= O_RDWR;
|
||||||
|
else if (strchr(mode, 'r'))
|
||||||
|
openmode |= O_RDONLY;
|
||||||
|
if (strstr(mode, "w+"))
|
||||||
|
openmode |= O_RDWR | O_CREAT | O_TRUNC;
|
||||||
|
else if (strchr(mode, 'w'))
|
||||||
|
openmode |= O_WRONLY | O_CREAT | O_TRUNC;
|
||||||
|
if (strchr(mode, 'a'))
|
||||||
|
openmode |= O_WRONLY | O_APPEND;
|
||||||
|
|
||||||
|
if (strchr(mode, 'b'))
|
||||||
|
openmode |= O_BINARY;
|
||||||
|
if (strchr(mode, 't'))
|
||||||
|
openmode |= O_TEXT;
|
||||||
|
|
||||||
|
fd = pgwin32_open(fileName, openmode);
|
||||||
|
if (fd == -1)
|
||||||
|
return NULL;
|
||||||
|
return _fdopen(fd, mode);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user