I found a bug that pg_controldata ends with error if control files
contain 0x1A (Ctrl+Z) on Windows.

We probably need to add PG_BINARY when we open control files
because 0x1A is an end-of-file marker on Windows.
This fix needs to be applied in back versions (8.2, 8.3 and HEAD).


Index: src/bin/pg_controldata/pg_controldata.c
===================================================================
--- src/bin/pg_controldata/pg_controldata.c     (head)
+++ src/bin/pg_controldata/pg_controldata.c     (pg_control_0x1A)
@@ -107,7 +107,7 @@
 
        snprintf(ControlFilePath, MAXPGPATH, "%s/global/pg_control", DataDir);
 
-       if ((fd = open(ControlFilePath, O_RDONLY, 0)) == -1)
+       if ((fd = open(ControlFilePath, O_RDONLY | PG_BINARY, 0)) == -1)
        {
                fprintf(stderr, _("%s: could not open file \"%s\" for reading: 
%s\n"),
                                progname, ControlFilePath, strerror(errno));
Index: src/bin/pg_resetxlog/pg_resetxlog.c
===================================================================
--- src/bin/pg_resetxlog/pg_resetxlog.c (head)
+++ src/bin/pg_resetxlog/pg_resetxlog.c (pg_control_0x1A)
@@ -373,7 +373,7 @@
        char       *buffer;
        pg_crc32        crc;
 
-       if ((fd = open(XLOG_CONTROL_FILE, O_RDONLY, 0)) < 0)
+       if ((fd = open(XLOG_CONTROL_FILE, O_RDONLY | PG_BINARY, 0)) < 0)
        {
                /*
                 * If pg_control is not there at all, or we can't read it, the 
odds

Regards,
---
ITAGAKI Takahiro
NTT Open Source Software Center


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to