Windows, thanks to a feature in CRT called Parameter Validation.
Backpatch to 8.2, which is the oldest version supported on Windows. In
8.2 and 8.3 also backpatch the earlier change to use DEVNULL instead of
NULL_DEV #define for a /dev/null-like device. NULL_DEV was hard-coded to
"/dev/null" regardless of platform, which didn't work on Windows, while
DEVNULL works on all platforms. Restarting syslogger didn't work on
Windows on versions 8.3 and below because of that.
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.551.2.5 2009/12/02 17:41:31 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/postmaster.c,v 1.551.2.6 2010/04/01 20:12:34 heikki Exp $
*
* NOTES
*
ExitPostmaster(1);
}
#endif
- i = open(NULL_DEV, O_RDWR, 0);
+ i = open(DEVNULL, O_RDWR, 0);
dup2(i, 0);
dup2(i, 1);
dup2(i, 2);
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.44.2.2 2009/11/19 02:45:50 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/postmaster/syslogger.c,v 1.44.2.3 2010/04/01 20:12:34 heikki Exp $
*
*-------------------------------------------------------------------------
*/
*/
if (redirection_done)
{
- int fd = open(NULL_DEV, O_WRONLY, 0);
+ int fd = open(DEVNULL, O_WRONLY, 0);
/*
* The closes might look redundant, but they are not: we want to be
*/
close(fileno(stdout));
close(fileno(stderr));
- dup2(fd, fileno(stdout));
- dup2(fd, fileno(stderr));
- close(fd);
+ if (fd != -1)
+ {
+ dup2(fd, fileno(stdout));
+ dup2(fd, fileno(stderr));
+ close(fd);
+ }
}
/*
* Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $PostgreSQL: pgsql/src/include/c.h,v 1.222.2.2 2009/03/11 00:08:07 alvherre Exp $
+ * $PostgreSQL: pgsql/src/include/c.h,v 1.222.2.3 2010/04/01 20:12:34 heikki Exp $
*
*-------------------------------------------------------------------------
*/
#include <unistd.h>
#endif
-/* These are for things that are one way on Unix and another on NT */
+/*
+ * This only works on Unix, not on Windows! This isn't used in PostgreSQL
+ * anymore, use the platform-aware DEVNULL instead. This is kept here just
+ * in case a 3rd party module uses it.
+ */
#define NULL_DEV "/dev/null"
/*