|
7 | 7 | *
|
8 | 8 | *
|
9 | 9 | * IDENTIFICATION
|
10 |
| - * $PostgreSQL: pgsql/src/port/exec.c,v 1.21 2004/08/09 20:20:46 tgl Exp $ |
| 10 | + * $PostgreSQL: pgsql/src/port/exec.c,v 1.22 2004/08/16 01:26:31 momjian Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -381,26 +381,28 @@ static char *pipe_read_line(char *cmd, char *line, int maxsize)
|
381 | 381 | {
|
382 | 382 | /* So we read some data */
|
383 | 383 | retval=line;
|
| 384 | +intlen=strlen(line); |
384 | 385 |
|
385 | 386 | /*
|
386 |
| - *Sometime the child returns "\r\n", which doesn't match |
387 |
| - *our version string. The backend uses |
388 |
| - *setvbuf(stdout, NULL, _IONBF, 0), but pg_dump doesn't |
389 |
| - *so we have to fix it here. |
| 387 | + *If EOL is \r\n, convert to just \n. |
| 388 | + *Because stdout is a text-mode stream, the \n output by |
| 389 | + *the child process is received as \r\n, so we convert it |
| 390 | + *to \n. The server main.c sets |
| 391 | + *setvbuf(stdout, NULL, _IONBF, 0) which has the effect |
| 392 | + *of disabling \n to \r\n expansion for stdout. |
390 | 393 | */
|
391 |
| -if (strlen(line) >=2&& |
392 |
| -line[strlen(line)-2]=='\r'&& |
393 |
| -line[strlen(line)-1]=='\n') |
| 394 | +if (len >=2&&line[len-2]=='\r'&&line[len-1]=='\n') |
394 | 395 | {
|
395 |
| -line[strlen(line)-2]='\n'; |
396 |
| -line[strlen(line)-1]='\0'; |
| 396 | +line[len-2]='\n'; |
| 397 | +line[len-1]='\0'; |
| 398 | +len--; |
397 | 399 | }
|
398 | 400 |
|
399 | 401 | /*
|
400 | 402 | *We emulate fgets() behaviour. So if there is no newline
|
401 | 403 | *at the end, we add one...
|
402 | 404 | */
|
403 |
| -if (line[strlen(line)-1]!='\n') |
| 405 | +if (line[len-1]!='\n') |
404 | 406 | strcat(line,"\n");
|
405 | 407 | }
|
406 | 408 |
|
|