X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=cprogs%2Fcgi-fcgi-interp.c;h=7a5a5db6a3a6c3eb17d37749b1c2b65de63a06a0;hp=2c157d218033a372c6e53c144cb091e29952ed18;hb=f5a069b4c63fd17039e9ffbec54d9e5eca73ce99;hpb=84351242462d8d501402ee63536b4f56be03e1c7 diff --git a/cprogs/cgi-fcgi-interp.c b/cprogs/cgi-fcgi-interp.c index 2c157d2..7a5a5db 100644 --- a/cprogs/cgi-fcgi-interp.c +++ b/cprogs/cgi-fcgi-interp.c @@ -789,12 +789,19 @@ static void errpipe_readable(void) { static char buf[1024]; static int pending; + /* %: does not contain newlines + * _: empty (garbage) + */ + + /* %%%%%%%%%%%__________________ */ + /* ^ pending */ + for (;;) { int avail = sizeof(buf) - pending; ssize_t got = read(errpipe, buf+pending, avail); if (got==-1) { if (errno==EINTR) continue; - else if (errno==EWOULDBLOCK || errno==EAGAIN) /*ok*/; + else if (errno==EWOULDBLOCK || errno==EAGAIN) return; else diee("(stage2) errpipe read"); got = 0; } else if (got==0) { @@ -819,6 +826,7 @@ static void errpipe_readable(void) { } syslog(LOG_ERR,"stderr: %.*s", printupto-eaten, buf+eaten); eaten += eat; + scanned = eaten; } pending -= eaten; memmove(buf, buf+eaten, pending);