Index: port/exec.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/port/exec.c,v retrieving revision 1.33 diff -c -r1.33 exec.c *** port/exec.c 27 Nov 2004 22:44:15 -0000 1.33 --- port/exec.c 19 Dec 2004 15:42:04 -0000 *************** *** 486,516 **** &si, &pi)) { - DWORD bytesread = 0; - /* Successfully started the process */ ZeroMemory(line, maxsize); ! /* Let's see if we can read */ ! if (WaitForSingleObject(childstdoutrddup, 10000) != WAIT_OBJECT_0) { ! /* Got timeout */ ! CloseHandle(pi.hProcess); ! CloseHandle(pi.hThread); ! CloseHandle(childstdoutwr); ! CloseHandle(childstdoutrddup); ! return NULL; } ! /* We try just once */ ! if (ReadFile(childstdoutrddup, line, maxsize, &bytesread, NULL) && ! bytesread > 0) { /* So we read some data */ ! int len = strlen(line); retval = line; /* * If EOL is \r\n, convert to just \n. Because stdout is a * text-mode stream, the \n output by the child process is --- 486,531 ---- &si, &pi)) { /* Successfully started the process */ + char *lineptr; ZeroMemory(line, maxsize); ! /* Read at least one line from the pipe */ ! for (lineptr = line;lineptr < line+maxsize-1;) { ! DWORD bytesread = 0; ! ! /* Let's see if we can read */ ! if (WaitForSingleObject(childstdoutrddup, 10000) != WAIT_OBJECT_0) ! /* Got timeout, but perhaps we got a line already */ ! break; ! ! if (!ReadFile(childstdoutrddup, lineptr, maxsize-(lineptr-line), &bytesread, NULL)) ! break; /* Error occurred, but perhaps we got a line already */ ! ! lineptr += strlen(lineptr); ! ! if (!bytesread) ! break; /* EOF */ ! ! if (strchr(line, '\n')) ! break; /* One or more lines read */ } ! if (lineptr != line) { /* So we read some data */ ! int len; retval = line; + /* If we got more than one line, cut off after the first \n */ + lineptr = strchr(line,'\n'); + if (lineptr) + *(lineptr+1) = 0; + + len = strlen(line); + /* * If EOL is \r\n, convert to just \n. Because stdout is a * text-mode stream, the \n output by the child process is