]> granicus.if.org Git - postgresql/commitdiff
Fix Win32 pg_dumpall, with help from Claudio.
authorBruce Momjian <bruce@momjian.us>
Sun, 8 Aug 2004 03:21:39 +0000 (03:21 +0000)
committerBruce Momjian <bruce@momjian.us>
Sun, 8 Aug 2004 03:21:39 +0000 (03:21 +0000)
src/port/exec.c

index b5f41c7971e726b5114aa5a9e9da1f11d844cf5f..30d7a55c1d29c9f6554961ec85c6082ecc47c825 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/port/exec.c,v 1.18 2004/08/08 02:22:55 momjian Exp $
+ *       $PostgreSQL: pgsql/src/port/exec.c,v 1.19 2004/08/08 03:21:39 momjian Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -374,8 +374,7 @@ static char *pipe_read_line(char *cmd, char *line, int maxsize)
                        CloseHandle(childstdoutrddup);
                        return NULL;
                }
-               
-               
+
                /* We try just once */
                if (ReadFile(childstdoutrddup, line, maxsize, &bytesread, NULL) &&
                        bytesread > 0)
@@ -383,6 +382,20 @@ static char *pipe_read_line(char *cmd, char *line, int maxsize)
                        /* So we read some data */
                        retval = line;
 
+                       /*
+                        *      Sometime the child returns "\r\n", which doesn't match
+                        *      our version string.  The backend uses
+                        *      setvbuf(stdout, NULL, _IONBF, 0), but pg_dump doesn't
+                        *      so we have to fix it here.
+                        */
+                       if (strlen(line) >= 2 &&
+                               line[strlen(line)-2] == '\r' &&
+                               line[strlen(line)-1] == '\n')
+                       {
+                               line[strlen(line)-2] == '\n';
+                               line[strlen(line)-1] == '\0';
+                       }
+
                        /*
                         *      We emulate fgets() behaviour. So if there is no newline
                         *      at the end, we add one...