From: Bruce Momjian <bruce@momjian.us>
Date: Sun, 8 Aug 2004 03:21:39 +0000 (+0000)
Subject: Fix Win32 pg_dumpall, with help from Claudio.
X-Git-Tag: REL8_0_0BETA1~24
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fd62065fa613d006647ece9ae1abc965b2cc210d;p=postgresql

Fix Win32 pg_dumpall, with help from Claudio.
---

diff --git a/src/port/exec.c b/src/port/exec.c
index b5f41c7971..30d7a55c1d 100644
--- a/src/port/exec.c
+++ b/src/port/exec.c
@@ -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...