rbb 99/03/15 06:26:56
Modified: pthreads/src/include buff.h httpd.h pthreads/src/main buff.c http_core.c http_protocol.c util_script.c pthreads/src/modules/proxy proxy_cache.c proxy_ftp.c proxy_http.c proxy_util.c pthreads/src/modules/standard mod_cgi.c mod_mime_magic.c Log: Changing the timeout logic a bit. Moved the timeouts into recvwithtimeout and sendwithtimeout. Which I implemented on UNIX platforms. This brings us a bit more in line with the Win32 code. This also removes that ugliness with errno in the last timing patch. Revision Changes Path 1.3 +4 -3 apache-apr/pthreads/src/include/buff.h Index: buff.h =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/include/buff.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- buff.h 1999/02/07 06:29:21 1.2 +++ buff.h 1999/03/15 14:26:48 1.3 @@ -161,10 +161,10 @@ /* I/O */ API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte); -API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb); +API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb, time_t sec); API_EXPORT(int) ap_blookc(char *buff, BUFF *fb); API_EXPORT(int) ap_bskiplf(BUFF *fb); -API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte); +API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte, time_t sec); API_EXPORT(int) ap_bflush(BUFF *fb); API_EXPORT(int) ap_bputs(const char *x, BUFF *fb); API_EXPORT(int) ap_bvputs(BUFF *fb,...); @@ -222,7 +222,8 @@ BUFF **pipe_err); /* enable non-blocking operations */ -API_EXPORT(int) ap_bnonblock(BUFF *fb, int direction); +API_EXPORT(int) ap_bnonblock(int fd); +API_EXPORT(int) ap_bblock(int fd); /* and get an fd to select() on */ API_EXPORT(int) ap_bfileno(BUFF *fb, int direction); 1.11 +1 -1 apache-apr/pthreads/src/include/httpd.h Index: httpd.h =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/include/httpd.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- httpd.h 1999/03/07 00:47:44 1.10 +++ httpd.h 1999/03/15 14:26:48 1.11 @@ -263,7 +263,7 @@ /* The timeout for waiting for keepalive timeout until next request */ #ifndef DEFAULT_KEEPALIVE_TIMEOUT -#define DEFAULT_KEEPALIVE_TIMEOUT 15000 +#define DEFAULT_KEEPALIVE_TIMEOUT 300 #endif /* The number of requests to entertain per connection */ 1.4 +113 -45 apache-apr/pthreads/src/main/buff.c Index: buff.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/main/buff.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- buff.c 1999/02/24 20:30:16 1.3 +++ buff.c 1999/03/15 14:26:49 1.4 @@ -125,7 +125,7 @@ select() sometimes returns 1 even though the write will block. We must work around this. */ -int sendwithtimeout(int sock, const char *buf, int len, int flags) +int sendwithtimeout(int sock, const char *buf, int len, int flags, int sec) { int iostate = 1; fd_set fdset; @@ -184,7 +184,7 @@ } -int recvwithtimeout(int sock, char *buf, int len, int flags) +int recvwithtimeout(int sock, char *buf, int len, int flags, int sec) { int iostate = 1; fd_set fdset; @@ -227,6 +227,78 @@ return (rv); } +#else + +int sendwithtimeout(int sock, const char *buf, int len, int flags, time_t sec) +{ + fd_set fdset; + struct timeval tv; + int err = EAGAIN; + int rv; + + tv.tv_sec = sec; + if (tv.tv_sec == 0) { + return (send(sock, buf, len, flags)); + } + ap_bnonblock(sock); + rv = send(sock, buf, len, flags); + if (rv == -1) { + err = errno; + if (err == EAGAIN || errno == EINTR) { + FD_ZERO(&fdset); + FD_SET(sock, &fdset); + tv.tv_usec = 0; + do { + rv = select(FD_SETSIZE, NULL, &fdset, NULL, &tv); + } while (rv == -1 && errno == EINTR); + if (rv == -1 || rv == 0) { + err = errno; + } + else { + rv = send(sock, buf, len, flags); + } + } + } + ap_bblock(sock); + return (rv); +} + +int recvwithtimeout(int sock, char *buf, int len, int flags, time_t sec) +{ + fd_set fdset; + struct timeval tv; + int err = EAGAIN; + int rv; + + tv.tv_sec = sec; + if (tv.tv_sec == 0) { + return (recv(sock, buf, len, flags)); + } + ap_bnonblock(sock); + rv = recv(sock, buf, len, flags); + if (rv == -1) { + err = errno; + if (err == EAGAIN || errno == EINTR) { + FD_ZERO(&fdset); + FD_SET(sock, &fdset); + tv.tv_usec = 0; + do { + rv = select(FD_SETSIZE, &fdset, NULL, NULL, &tv); + } while (rv == -1 && errno == EINTR); + if (rv == -1 || rv == 0) { + err = errno; + } + else { + rv = recv(sock, buf, len, flags); + if (rv == -1) + err = errno; + } + } + } + ap_bblock(sock); + return (rv); +} + #endif /* WIN32 */ @@ -247,13 +319,13 @@ return rv; } -static ap_inline int buff_read(BUFF *fb, void *buf, int nbyte) +static ap_inline int buff_read(BUFF *fb, void *buf, int nbyte, time_t sec) { int rv; #if defined (WIN32) if (fb->flags & B_SOCKET) { - rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0); + rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0, sec); if (rv == SOCKET_ERROR) errno = WSAGetLastError(); } @@ -278,7 +350,7 @@ } rv = ap_read(fb, buf, nbyte); #else - rv = ap_read(fb, buf, nbyte); + rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0, sec); #endif /* WIN32 */ return rv; } @@ -304,20 +376,20 @@ return rv; } -static ap_inline int buff_write(BUFF *fb, const void *buf, int nbyte) +static ap_inline int buff_write(BUFF *fb, const void *buf, int nbyte, time_t sec) { int rv; #if defined(WIN32) if (fb->flags & B_SOCKET) { - rv = sendwithtimeout(fb->fd, buf, nbyte, 0); + rv = sendwithtimeout(fb->fd, buf, nbyte, 0, sec); if (rv == SOCKET_ERROR) errno = WSAGetLastError(); } else rv = ap_write(fb, buf, nbyte); #else - rv = ap_write(fb, buf, nbyte); + rv = sendwithtimeout(fb->fd, buf, nbyte, 0, sec); #endif /* WIN32 */ return rv; } @@ -539,12 +611,10 @@ return value; } -API_EXPORT(int) ap_bnonblock(BUFF *fb, int direction) +API_EXPORT(int) ap_bnonblock(int fd) { - APRFile fd; int fd_flags; - fd = (direction == B_RD) ? fb->fd_in : fb->fd; fd_flags = fcntl(fd, F_GETFL, 0); #if defined(O_NONBLOCK) fd_flags |= O_NONBLOCK; @@ -561,12 +631,10 @@ #endif } -API_EXPORT(int) ap_bblock(BUFF *fb, int direction) +API_EXPORT(int) ap_bblock(int fd) { - APRFile fd; int fd_flags; - fd = (direction == B_RD) ? fb->fd_in : fb->fd; fd_flags = fcntl(fd, F_GETFL, 0); #if defined(O_NONBLOCK) fd_flags &= ~O_NONBLOCK; @@ -599,7 +667,7 @@ #if !defined (B_SFIO) || defined (WIN32) #define saferead saferead_guts #else -static int saferead(BUFF *fb, char *buf, int nbyte) +static int saferead(BUFF *fb, char *buf, int nbyte, time_t sec) { return sfread(fb->sf_in, buf, nbyte); } @@ -639,7 +707,7 @@ } } -static ap_inline int saferead_guts(BUFF *fb, void *buf, int nbyte) +static ap_inline int saferead_guts(BUFF *fb, void *buf, int nbyte, time_t sec) { int rv; @@ -647,7 +715,7 @@ ap_bhalfduplex(fb); } do { - rv = buff_read(fb, buf, nbyte); + rv = buff_read(fb, buf, nbyte, sec); } while (rv == -1 && errno == EINTR && !(fb->flags & B_EOUT)); return (rv); } @@ -658,7 +726,7 @@ int rv; BUFF *fb = disc->buff; - rv = saferead_guts(fb, buf, nbyte); + rv = saferead_guts(fb, buf, nbyte, 0); buf[rv] = '\0'; f->next = 0; @@ -694,11 +762,11 @@ * and then there's the SFIO case. Note that saferead takes care * of EINTR. */ -static int read_with_errors(BUFF *fb, void *buf, int nbyte) +static int read_with_errors(BUFF *fb, void *buf, int nbyte, time_t sec) { int rv; - rv = saferead(fb, buf, nbyte); + rv = saferead(fb, buf, nbyte, sec); if (rv == 0) { fb->flags |= B_EOF; } @@ -740,7 +808,7 @@ fb->inptr += i; return i; } - i = read_with_errors(fb, buf, nbyte); + i = read_with_errors(fb, buf, nbyte, 0); #ifdef CHARSET_EBCDIC if (i > 0 && ap_bgetflag(fb, B_ASCII2EBCDIC)) ascii2ebcdic(buf, buf, i); @@ -779,7 +847,7 @@ /* do a single read */ if (nbyte >= fb->bufsiz) { /* read directly into caller's buffer */ - i = read_with_errors(fb, buf, nbyte); + i = read_with_errors(fb, buf, nbyte, 0); #ifdef CHARSET_EBCDIC if (i > 0 && ap_bgetflag(fb, B_ASCII2EBCDIC)) ascii2ebcdic(buf, buf, i); @@ -791,7 +859,7 @@ else { /* read into hold buffer, then memcpy */ fb->inptr = fb->inbase; - i = read_with_errors(fb, fb->inptr, fb->bufsiz); + i = read_with_errors(fb, fb->inptr, fb->bufsiz, 0); if (i == -1) { return nrd ? nrd : -1; } @@ -829,7 +897,7 @@ * CR characters in the byte stream not immediately followed by a LF * will be preserved. */ -API_EXPORT(int) ap_bgets(char *buff, int n, BUFF *fb) +API_EXPORT(int) ap_bgets(char *buff, int n, BUFF *fb, time_t sec) { int i, ch, ct; @@ -850,7 +918,7 @@ fb->incnt = 0; if (fb->flags & B_EOF) break; - i = read_with_errors(fb, fb->inptr, fb->bufsiz); + i = read_with_errors(fb, fb->inptr, fb->bufsiz, sec); if (i == -1) { buff[ct] = '\0'; return ct ? ct : -1; @@ -931,7 +999,7 @@ if (fb->flags & B_EOF) return 0; - i = read_with_errors(fb, fb->inptr, fb->bufsiz); + i = read_with_errors(fb, fb->inptr, fb->bufsiz, 0); if (i <= 0) { return i; } @@ -978,7 +1046,7 @@ fb->incnt = 0; if (fb->flags & B_EOF) return 0; - i = read_with_errors(fb, fb->inptr, fb->bufsiz); + i = read_with_errors(fb, fb->inptr, fb->bufsiz, 0); if (i <= 0) return i; fb->incnt = i; @@ -994,7 +1062,7 @@ char ss[1]; ss[0] = c; - return ap_bwrite(fb, ss, 1); + return ap_bwrite(fb, ss, 1, 0); } /* @@ -1024,7 +1092,7 @@ * * Deals with calling doerror and setting bytes_sent. */ -static int write_it_all(BUFF *fb, const void *buf, int nbyte) +static int write_it_all(BUFF *fb, const void *buf, int nbyte, time_t sec) { int i; @@ -1032,7 +1100,7 @@ return -1; while (nbyte > 0) { - i = buff_write(fb, buf, nbyte); + i = buff_write(fb, buf, nbyte, sec); if (i < 0) { if (errno != EAGAIN && errno != EINTR) { doerror(fb, B_WR); @@ -1100,12 +1168,12 @@ /* A wrapper for buff_write which deals with error conditions and * bytes_sent. Also handles non-blocking writes. */ -static int write_with_errors(BUFF *fb, const void *buf, int nbyte) +static int write_with_errors(BUFF *fb, const void *buf, int nbyte, time_t sec) { int rv; do - rv = buff_write(fb, buf, nbyte); + rv = buff_write(fb, buf, nbyte, sec); while (rv == -1 && errno == EINTR && !(fb->flags & B_EOUT)); if (rv == -1) { if (errno != EAGAIN) { @@ -1131,7 +1199,7 @@ * Can be used on non-blocking descriptors, but only if they're not chunked. * Deals with doerror() and bytes_sent. */ -static int bcwrite(BUFF *fb, const void *buf, int nbyte) +static int bcwrite(BUFF *fb, const void *buf, int nbyte, time_t sec) { char chunksize[16]; /* Big enough for practically anything */ #ifndef NO_WRITEV @@ -1142,7 +1210,7 @@ return -1; if (!(fb->flags & B_CHUNK)) { - return write_with_errors(fb, buf, nbyte); + return write_with_errors(fb, buf, nbyte, sec); } #ifdef NO_WRITEV @@ -1153,11 +1221,11 @@ /* Chunks are an HTTP/1.1 Protocol feature. They must ALWAYS be in ASCII */ ebcdic2ascii(chunksize, chunksize, strlen(chunksize)); #endif /*CHARSET_EBCDIC*/ - if (write_it_all(fb, chunksize, strlen(chunksize)) == -1) + if (write_it_all(fb, chunksize, strlen(chunksize), 0) == -1) return -1; - if (write_it_all(fb, buf, nbyte) == -1) + if (write_it_all(fb, buf, nbyte, 0) == -1) return -1; - if (write_it_all(fb, "\015\012", 2) == -1) + if (write_it_all(fb, "\015\012", 2, 0) == -1) return -1; return nbyte; #else @@ -1240,7 +1308,7 @@ * It is worth noting that if an error occurs, the buffer is in an unknown * state. */ -API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte) +API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte, time_t sec) { int i, nwr, useable_bufsiz; #ifdef CHARSET_EBCDIC @@ -1270,7 +1338,7 @@ if (!(fb->flags & B_WR)) { /* unbuffered write -- have to use bcwrite since we aren't taking care * of chunking any other way */ - return bcwrite(fb, buf, nbyte); + return bcwrite(fb, buf, nbyte, sec); } #ifndef NO_WRITEV @@ -1313,14 +1381,14 @@ /* it is just too painful to try to re-cram the buffer while * chunking */ - if (write_it_all(fb, fb->outbase, fb->outcnt) == -1) { + if (write_it_all(fb, fb->outbase, fb->outcnt, 0) == -1) { /* we cannot continue after a chunked error */ return -1; } fb->outcnt = 0; break; } - i = write_with_errors(fb, fb->outbase, fb->outcnt); + i = write_with_errors(fb, fb->outbase, fb->outcnt, 0); if (i <= 0) { return nwr ? nwr : -1; } @@ -1354,7 +1422,7 @@ useable_bufsiz = fb->bufsiz; if (fb->flags & B_CHUNK) useable_bufsiz -= CHUNK_HEADER_SIZE; while (nbyte >= useable_bufsiz) { - i = bcwrite(fb, buf, nbyte); + i = bcwrite(fb, buf, nbyte, 0); if (i <= 0) { return nwr ? nwr : -1; } @@ -1383,7 +1451,7 @@ int i; while (fb->outcnt > 0) { - i = write_with_errors(fb, fb->outbase, fb->outcnt); + i = write_with_errors(fb, fb->outbase, fb->outcnt, 0); if (i <= 0) return -1; @@ -1500,7 +1568,7 @@ API_EXPORT(int) ap_bputs(const char *x, BUFF *fb) { int i, j = strlen(x); - i = ap_bwrite(fb, x, j); + i = ap_bwrite(fb, x, j, 0); if (i != j) return -1; else @@ -1522,7 +1590,7 @@ if (x == NULL) break; j = strlen(x); - i = ap_bwrite(fb, x, j); + i = ap_bwrite(fb, x, j, 0); if (i != j) { va_end(v); return -1; 1.9 +2 -2 apache-apr/pthreads/src/main/http_core.c Index: http_core.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/main/http_core.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- http_core.c 1999/02/24 20:30:17 1.8 +++ http_core.c 1999/03/15 14:26:49 1.9 @@ -1965,7 +1965,7 @@ return err; } - cmd->server->timeout = atoi(arg) * 1000; + cmd->server->timeout = atoi(arg); return NULL; } @@ -1977,7 +1977,7 @@ return err; } - cmd->server->keep_alive_timeout = atoi(arg) * 1000; + cmd->server->keep_alive_timeout = atoi(arg); return NULL; } 1.9 +15 -49 apache-apr/pthreads/src/main/http_protocol.c Index: http_protocol.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/main/http_protocol.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- http_protocol.c 1999/03/04 00:06:58 1.8 +++ http_protocol.c 1999/03/15 14:26:50 1.9 @@ -651,7 +651,7 @@ * then the actual input line exceeded the buffer length, * and it would be a good idea for the caller to puke 400 or 414. */ -static int getline(char *s, int n, BUFF *in, int fold) +static int getline(char *s, int n, BUFF *in, int fold, time_t sec) { char *pos, next; int retval; @@ -660,7 +660,8 @@ pos = s; do { - retval = ap_bgets(pos, n, in); /* retval == -1 if error, 0 if EOF */ + retval = ap_bgets(pos, n, in, sec); + /* retval == -1 if error, 0 if EOF */ if (retval <= 0) return ((retval < 0) && (total == 0)) ? -1 : total; @@ -780,7 +781,7 @@ * have to block during a read. */ ap_bsetflag(conn->client, B_SAFEREAD, 1); - while ((len = getline(l, sizeof(l), conn->client, 0)) <= 0) { + while ((len = getline(l, sizeof(l), conn->client, 0, ap_get_timeout(r))) <= 0) { if ((len < 0) || ap_bgetflag(conn->client, B_EOF)) { ap_bsetflag(conn->client, B_SAFEREAD, 0); return 0; @@ -853,7 +854,7 @@ * Read header lines until we get the empty separator line, a read error, * the connection closes (EOF), reach the server limit, or we timeout. */ - while ((len = getline(field, sizeof(field), c->client, 1)) > 0) { + while ((len = getline(field, sizeof(field), c->client, 1, 0)) > 0) { if (r->server->limit_req_fields && (++fields_read > r->server->limit_req_fields)) { @@ -902,10 +903,8 @@ pool *p; const char *expect; int access_status; - struct pollfd *filedes; - int timeout, rv; + int rv; - filedes = (struct pollfd *)malloc(sizeof(struct pollfd)); p = ap_make_sub_pool(conn->pool); r = ap_pcalloc(p, sizeof(request_rec)); r->pool = p; @@ -941,38 +940,8 @@ #endif /* Get the request... */ - ap_bnonblock(r->connection->client, B_RD); - errno = 0; - while (!read_request_line(r)) { - if (errno == EAGAIN) { - errno = 0; - filedes->fd = ap_bfileno(r->connection->client, B_RD); - filedes->events = POLLIN; - filedes->revents = 0; - timeout = ap_get_timeout(r); - if ((rv = poll(filedes, 1, timeout)) == 0) { - ap_bclose(r->connection->client); - } - else if (rv == -1) { - ap_bclose(r->connection->client); - ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r, - "Timeout hasn't occured, but something is wrong, " - "closing the connection."); - } - else { - if (filedes->revents &= POLLIN) { - continue; - } - else { - ap_bclose(r->connection->client); - ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r, - "Event other than POLLIN, closing connection."); - } - - } - } + if (!read_request_line(r)) { if (r->status == HTTP_REQUEST_URI_TOO_LARGE) { - ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, r, "request failed: URI too long"); ap_send_error_response(r, 0); @@ -980,11 +949,8 @@ ap_log_transaction(r); return r; } - free(filedes); return NULL; } - free(filedes); - ap_bblock(r->connection->client, B_RD); if (!r->assbackwards) { get_mime_headers(r); if (r->status != HTTP_REQUEST_TIME_OUT) { @@ -1758,7 +1724,7 @@ if (r->remaining == 0) { /* Start of new chunk */ - chunk_start = getline(buffer, bufsiz, r->connection->client, 0); + chunk_start = getline(buffer, bufsiz, r->connection->client, 0, 0); if ((chunk_start <= 0) || (chunk_start >= (bufsiz - 1)) || !isxdigit(*buffer)) { r->connection->keepalive = -1; @@ -1799,7 +1765,7 @@ len_read = chunk_start; while ((bufsiz > 1) && ((len_read = - getline(buffer, bufsiz, r->connection->client, 1)) > 0)) { + getline(buffer, bufsiz, r->connection->client, 1, 0)) > 0)) { if (len_read != (bufsiz - 1)) { buffer[len_read++] = CR; /* Restore footer line end */ @@ -1927,7 +1893,7 @@ o = 0; while (n && !ap_is_aborted(r->connection)) { - w = ap_bwrite(r->connection->client, &buf[o], n); + w = ap_bwrite(r->connection->client, &buf[o], n, 0); if (w > 0) { total_bytes_sent += w; n -= w; @@ -1976,8 +1942,8 @@ /* Make fb unbuffered and non-blocking */ ap_bsetflag(fb, B_RD, 0); - ap_bnonblock(fb, B_RD); fd = ap_bfileno(fb, B_RD); + ap_bnonblock(fd); #ifndef WIN32 if (fd >= FD_SETSIZE) { ap_log_error(APLOG_MARK, APLOG_NOERRNO|APLOG_WARNING, NULL, @@ -2042,7 +2008,7 @@ total_bytes_sent += n; while (n && !ap_is_aborted(r->connection)) { - w = ap_bwrite(r->connection->client, &buf[o], n); + w = ap_bwrite(r->connection->client, &buf[o], n, 0); if (w > 0) { n -= w; o += w; @@ -2105,7 +2071,7 @@ } while (n && !r->connection->aborted) { - w = ap_bwrite(r->connection->client, (char *) mm + offset, n); + w = ap_bwrite(r->connection->client, (char *) mm + offset, n, 0); if (w > 0) { total_bytes_sent += w; n -= w; @@ -2156,7 +2122,7 @@ int n; if (r->connection->aborted) return EOF; - n = ap_bwrite(r->connection->client, buf, nbyte); + n = ap_bwrite(r->connection->client, buf, nbyte, 0); SET_BYTES_SENT(r); return n; } @@ -2191,7 +2157,7 @@ if (x == NULL) break; j = strlen(x); - i = ap_bwrite(fb, x, j); + i = ap_bwrite(fb, x, j, 0); if (i != j) { va_end(args); return -1; 1.3 +1 -1 apache-apr/pthreads/src/main/util_script.c Index: util_script.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/main/util_script.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- util_script.c 1999/02/07 06:29:32 1.2 +++ util_script.c 1999/03/15 14:26:50 1.3 @@ -609,7 +609,7 @@ static int getsfunc_BUFF(char *w, int len, void *fb) { - return ap_bgets(w, len, (BUFF *) fb) > 0; + return ap_bgets(w, len, (BUFF *) fb, 0) > 0; } API_EXPORT(int) ap_scan_script_header_err_buff(request_rec *r, BUFF *fb, 1.4 +3 -3 apache-apr/pthreads/src/modules/proxy/proxy_cache.c Index: proxy_cache.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/modules/proxy/proxy_cache.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- proxy_cache.c 1999/02/07 06:29:47 1.3 +++ proxy_cache.c 1999/03/15 14:26:52 1.4 @@ -548,7 +548,7 @@ * date SP lastmod SP expire SP count SP content-length CRLF * dates are stored as hex seconds since 1970 */ - len = ap_bgets(urlbuff, sizeof urlbuff, cachefp); + len = ap_bgets(urlbuff, sizeof urlbuff, cachefp, 0); if (len == -1) return -1; if (len == 0 || urlbuff[len - 1] != '\n') @@ -566,7 +566,7 @@ c->len = ap_proxy_hex2sec(urlbuff + 36); /* check that we have the same URL */ - len = ap_bgets(urlbuff, sizeof urlbuff, cachefp); + len = ap_bgets(urlbuff, sizeof urlbuff, cachefp, 0); if (len == -1) return -1; if (len == 0 || strncmp(urlbuff, "X-URL: ", 7) != 0 || @@ -577,7 +577,7 @@ return 0; /* What follows is the message */ - len = ap_bgets(urlbuff, sizeof urlbuff, cachefp); + len = ap_bgets(urlbuff, sizeof urlbuff, cachefp, 0); if (len == -1) return -1; if (len == 0 || urlbuff[len - 1] != '\n') 1.3 +8 -8 apache-apr/pthreads/src/modules/proxy/proxy_ftp.c Index: proxy_ftp.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/modules/proxy/proxy_ftp.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- proxy_ftp.c 1999/02/07 06:29:48 1.2 +++ proxy_ftp.c 1999/03/15 14:26:52 1.3 @@ -193,7 +193,7 @@ int len, status; char linebuff[100], buff[5]; - len = ap_bgets(linebuff, sizeof linebuff, f); + len = ap_bgets(linebuff, sizeof linebuff, f, 0); if (len == -1) return -1; /* check format */ @@ -212,7 +212,7 @@ memcpy(buff, linebuff, 3); buff[3] = ' '; do { - len = ap_bgets(linebuff, sizeof linebuff, f); + len = ap_bgets(linebuff, sizeof linebuff, f, 0); if (len == -1) return -1; if (linebuff[len - 1] != '\n') { @@ -235,7 +235,7 @@ char *mb = msgbuf, *me = &msgbuf[msglen]; - len = ap_bgets(linebuff, sizeof linebuff, f); + len = ap_bgets(linebuff, sizeof linebuff, f, 0); if (len == -1) return -1; if (len < 5 || !ap_isdigit(linebuff[0]) || !ap_isdigit(linebuff[1]) || @@ -253,7 +253,7 @@ memcpy(buff, linebuff, 3); buff[3] = ' '; do { - len = ap_bgets(linebuff, sizeof linebuff, f); + len = ap_bgets(linebuff, sizeof linebuff, f, 0); if (len == -1) return -1; if (linebuff[len - 1] != '\n') { @@ -320,7 +320,7 @@ total_bytes_sent += ap_proxy_bputs2(buf, con->client, c); while (!con->aborted) { - n = ap_bgets(buf, sizeof buf, f); + n = ap_bgets(buf, sizeof buf, f, 0); if (n == -1) { /* input error */ if (c != NULL) c = ap_proxy_cache_error(c); @@ -382,11 +382,11 @@ o = 0; total_bytes_sent += n; - if (c != NULL && c->fp && ap_bwrite(c->fp, buf, n) != n) + if (c != NULL && c->fp && ap_bwrite(c->fp, buf, n, 0) != n) c = ap_proxy_cache_error(c); while (n && !r->connection->aborted) { - w = ap_bwrite(con->client, &buf[o], n); + w = ap_bwrite(con->client, &buf[o], n, 0); if (w <= 0) break; n -= w; @@ -802,7 +802,7 @@ /* 501 Syntax error in parameters or arguments. */ /* 502 Command not implemented. */ /* 530 Not logged in. */ - i = ap_bgets(pasv, sizeof(pasv), f); + i = ap_bgets(pasv, sizeof(pasv), f, 0); if (i == -1) { ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, r, "PASV: control connection is toast"); 1.3 +4 -4 apache-apr/pthreads/src/modules/proxy/proxy_http.c Index: proxy_http.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/modules/proxy/proxy_http.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- proxy_http.c 1999/02/07 06:29:48 1.2 +++ proxy_http.c 1999/03/15 14:26:52 1.3 @@ -354,11 +354,11 @@ if (ap_should_client_block(r)) { while ((i = ap_get_client_block(r, buffer, sizeof buffer)) > 0) - ap_bwrite(f, buffer, i); + ap_bwrite(f, buffer, i, 0); } ap_bflush(f); - len = ap_bgets(buffer, sizeof buffer - 1, f); + len = ap_bgets(buffer, sizeof buffer - 1, f, 0); if (len == -1 || len == 0) { ap_bclose(f); ap_log_rerror(APLOG_MARK, APLOG_ERR, r, @@ -486,8 +486,8 @@ r->sent_bodyct = 1; /* Is it an HTTP/0.9 respose? If so, send the extra data */ if (backasswards) { - ap_bwrite(r->connection->client, buffer, len); - if (c != NULL && c->fp != NULL && ap_bwrite(c->fp, buffer, len) != len) + ap_bwrite(r->connection->client, buffer, len, 0); + if (c != NULL && c->fp != NULL && ap_bwrite(c->fp, buffer, len, 0) != len) c = ap_proxy_cache_error(c); } 1.3 +3 -3 apache-apr/pthreads/src/modules/proxy/proxy_util.c Index: proxy_util.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/modules/proxy/proxy_util.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- proxy_util.c 1999/02/07 06:29:48 1.2 +++ proxy_util.c 1999/03/15 14:26:52 1.3 @@ -390,7 +390,7 @@ pos = s; do { - retval = ap_bgets(pos, n, in); /* retval == -1 if error, 0 if EOF */ + retval = ap_bgets(pos, n, in, 0); /* retval == -1 if error, 0 if EOF */ if (retval <= 0) return ((retval < 0) && (total == 0)) ? -1 : total; @@ -551,7 +551,7 @@ /* Write to cache first. */ if (c != NULL && c->fp != NULL) { - if (ap_bwrite(c->fp, &buf[0], n) != n) { + if (ap_bwrite(c->fp, &buf[0], n, 0) != n) { c = ap_proxy_cache_error(c); } else { c->written += n; @@ -560,7 +560,7 @@ /* Write the block to the client, detect aborted transfers */ while (n && !con->aborted) { - w = ap_bwrite(con->client, &buf[o], n); + w = ap_bwrite(con->client, &buf[o], n, 0); if (w <= 0) { if (c != NULL && c->fp != NULL) { 1.3 +10 -10 apache-apr/pthreads/src/modules/standard/mod_cgi.c Index: mod_cgi.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/modules/standard/mod_cgi.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- mod_cgi.c 1999/02/07 06:29:52 1.2 +++ mod_cgi.c 1999/03/15 14:26:54 1.3 @@ -208,9 +208,9 @@ ((f = ap_pfopen(r->pool, ap_server_root_relative(r->pool, conf->logname), "a")) == NULL)) { /* Soak up script output */ - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, 0) > 0) continue; - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, 0) > 0) continue; return ret; } @@ -245,18 +245,18 @@ if (sbuf && *sbuf) fprintf(f, "%s\n", sbuf); - if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) { + if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, 0) > 0) { fputs("%stdout\n", f); fputs(argsbuffer, f); - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, 0) > 0) fputs(argsbuffer, f); fputs("\n", f); } - if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) { + if (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, 0) > 0) { fputs("%stderr\n", f); fputs(argsbuffer, f); - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, 0) > 0) fputs(argsbuffer, f); fputs("\n", f); } @@ -473,7 +473,7 @@ memcpy(dbuf + dbpos, argsbuffer, dbsize); dbpos += dbsize; } - if (ap_bwrite(script_out, argsbuffer, len_read) < len_read) { + if (ap_bwrite(script_out, argsbuffer, len_read, 0) < len_read) { /* silly script stopped reading, soak up remaining message */ while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0) { /* dump it */ @@ -509,10 +509,10 @@ if (location && location[0] == '/' && r->status == 200) { /* Soak up all the script output */ - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in) > 0) { + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_in, 0) > 0) { continue; } - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) { + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, 0) > 0) { continue; } /* This redirect needs to be a GET no matter what the original @@ -543,7 +543,7 @@ } ap_bclose(script_in); - while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err) > 0) { + while (ap_bgets(argsbuffer, HUGE_STRING_LEN, script_err, 0) > 0) { continue; } ap_bclose(script_err); 1.6 +1 -1 apache-apr/pthreads/src/modules/standard/mod_mime_magic.c Index: mod_mime_magic.c =================================================================== RCS file: /home/cvs/apache-apr/pthreads/src/modules/standard/mod_mime_magic.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- mod_mime_magic.c 1999/02/07 06:29:54 1.5 +++ mod_mime_magic.c 1999/03/15 14:26:55 1.6 @@ -2178,7 +2178,7 @@ return -1; } - if (ap_bwrite(bin, old, n) != n) { + if (ap_bwrite(bin, old, n, 0) != n) { ap_destroy_pool(sub_pool); ap_log_rerror(APLOG_MARK, APLOG_ERR, r, MODNAME ": write failed.");