You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by ma...@hyperreal.org on 1999/10/30 07:25:33 UTC

cvs commit: apache-2.0/src/modules/standard mod_cgi.c mod_echo.c

manoj       99/10/29 22:25:33

  Modified:    src/include buff.h
               src/main buff.c http_protocol.c
               src/modules/standard mod_cgi.c mod_echo.c
  Log:
  ap_bwrite now exports an errnoless interface.
  
  Revision  Changes    Path
  1.8       +3 -2      apache-2.0/src/include/buff.h
  
  Index: buff.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/include/buff.h,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -d -u -r1.7 -r1.8
  --- buff.h	1999/10/30 02:06:32	1.7
  +++ buff.h	1999/10/30 05:25:28	1.8
  @@ -78,7 +78,7 @@
       non-blocking, unbuffered
       non-blocking, unbuffered, HTTP-chunked
   
  -    In all the blocking modes, a bwrite(fb, buf, len) will return less
  +    In all the blocking modes, a bwrite(fb, buf, len) will write less
       than len only in an error state.  The error may be deferred until
       the next use of fb.
   
  @@ -186,7 +186,8 @@
                                    ap_ssize_t *bytes_read);
   API_EXPORT(int) ap_bgets(char *s, int n, BUFF *fb);
   API_EXPORT(int) ap_blookc(BUFF *fb);
  -API_EXPORT(int) ap_bwrite(BUFF *fb, const void *buf, int nbyte);
  +API_EXPORT(ap_status_t) ap_bwrite(BUFF *fb, const void *buf, ap_size_t nbyte,
  +                                  ap_ssize_t *bytes_written);
   API_EXPORT(ap_status_t) ap_bflush(BUFF *fb);
   API_EXPORT(int) ap_bputs(const char *x, BUFF *fb);
   API_EXPORT(int) ap_bvputs(BUFF *fb,...);
  
  
  
  1.20      +24 -20    apache-2.0/src/main/buff.c
  
  Index: buff.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/buff.c,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -d -u -r1.19 -r1.20
  --- buff.c	1999/10/30 02:06:32	1.19
  +++ buff.c	1999/10/30 05:25:29	1.20
  @@ -529,9 +529,16 @@
   API_EXPORT(int) ap_bflsbuf(int c, BUFF *fb)
   {
       char ss[1];
  +    ap_ssize_t bytes_written;
  +    ap_status_t rv;
   
       ss[0] = c;
  -    return ap_bwrite(fb, ss, 1);
  +    rv = ap_bwrite(fb, ss, 1, &bytes_written);
  +    if (rv == APR_SUCCESS) {
  +        return bytes_written;
  +    }
  +    errno = rv;
  +    return -1;
   }
   
   /*
  @@ -767,19 +774,21 @@
    * 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(ap_status_t) ap_bwrite(BUFF *fb, const void *buf, ap_size_t nbyte,
  +                                  ap_ssize_t *bytes_written)
   {
       int amt;
       int total;
       ap_ssize_t n;
  -    ap_status_t rv;
   
       if (fb->flags & (B_WRERR | B_EOUT)) {
  -	errno = fb->saved_errno;
  -	return -1;
  +        *bytes_written = 0;
  +	return fb->saved_errno;
       }
  -    if (nbyte == 0)
  -	return 0;
  +    if (nbyte == 0) {
  +        *bytes_written = 0;
  +	return APR_SUCCESS;
  +    }
   
   /*
    * Detect case where we're asked to write a large buffer, and combine our
  @@ -790,19 +799,12 @@
    */
       if (!(fb->flags & B_WR)
   	|| (nbyte > LARGE_WRITE_THRESHOLD && nbyte + fb->outcnt >= fb->bufsiz)) {
  -        ap_ssize_t n;
  -
   	if (fb->flags & B_CHUNK) {
  -	    rv = large_write_chunk(fb, buf, nbyte, &n);
  +	    return large_write_chunk(fb, buf, nbyte, bytes_written);
   	}
           else {
  -	    rv = large_write(fb, buf, nbyte, &n);
  -        }
  -        if (rv == APR_SUCCESS) {
  -            return n;
  +	    return large_write(fb, buf, nbyte, bytes_written);
           }
  -        errno = rv;
  -        return -1;
       }
   
       /* at this point we know that nbyte < fb->bufsize */
  @@ -815,14 +817,16 @@
   	nbyte -= amt;
           (void) bflush_core(fb, &n);
   	if (n < amt) {
  -	    return amt;
  +            *bytes_written = amt;
  +            return APR_SUCCESS;
   	}
   	total = amt;
       }
       /* now we know that nbyte < fb->bufsiz */
       memcpy(fb->outbase + fb->outcnt, buf, nbyte);
       fb->outcnt += nbyte;
  -    return total + nbyte;
  +    *bytes_written = total + nbyte;
  +    return APR_SUCCESS;
   }
   
   /*
  @@ -875,7 +879,7 @@
   API_EXPORT(int) ap_bputs(const char *x, BUFF *fb)
   {
       int i, j = strlen(x);
  -    i = ap_bwrite(fb, x, j);
  +    (void) ap_bwrite(fb, x, j, &i);
       if (i != j)
   	return -1;
       else
  @@ -897,7 +901,7 @@
   	if (x == NULL)
   	    break;
   	j = strlen(x);
  -	i = ap_bwrite(fb, x, j);
  +	(void) ap_bwrite(fb, x, j, &i);
   	if (i != j) {
   	    va_end(v);
   	    return -1;
  
  
  
  1.28      +27 -21    apache-2.0/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_protocol.c,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -d -u -r1.27 -r1.28
  --- http_protocol.c	1999/10/30 02:06:33	1.27
  +++ http_protocol.c	1999/10/30 05:25:30	1.28
  @@ -2015,9 +2015,10 @@
   {
       char buf[IOBUFSIZE];
       long total_bytes_sent = 0;
  -    register int w, o;
  +    register int o;
  +    ap_ssize_t w;
       ap_ssize_t n;
  -    ap_status_t status;
  +    ap_status_t rv;
   
       if (length == 0)
           return 0;
  @@ -2030,8 +2031,8 @@
           
           n = o;
           do {
  -            status = ap_read(fd, buf, &n);
  -        } while (status == APR_EINTR && !ap_is_aborted(r->connection) &&
  +            rv = ap_read(fd, buf, &n);
  +        } while (rv == APR_EINTR && !ap_is_aborted(r->connection) &&
                    (n < 1));
   
           if (n < 1) {
  @@ -2041,15 +2042,15 @@
           o = 0;
   
           while (n && !ap_is_aborted(r->connection)) {
  -            w = ap_bwrite(r->connection->client, &buf[o], n);
  +            rv = ap_bwrite(r->connection->client, &buf[o], n, &w);
               if (w > 0) {
                   total_bytes_sent += w;
                   n -= w;
                   o += w;
               }
  -            else if (w < 0) {
  +            else if (rv != APR_SUCCESS) {
                   if (!ap_is_aborted(r->connection)) {
  -                    ap_log_rerror(APLOG_MARK, APLOG_INFO, errno, r,
  +                    ap_log_rerror(APLOG_MARK, APLOG_INFO, rv, r,
                        "client stopped connection before send body completed");
                       ap_bsetflag(r->connection->client, B_EOUT, 1);
                       r->connection->aborted = 1;
  @@ -2076,7 +2077,8 @@
       char buf[IOBUFSIZE];
       long total_bytes_sent = 0;
       long zero_timeout = 0;
  -    int w, o;
  +    register int o;
  +    ap_ssize_t w;
       ap_ssize_t n;
       ap_status_t rv;
   
  @@ -2120,15 +2122,15 @@
           
           o = 0;
           while (n && !ap_is_aborted(r->connection)) {
  -            w = ap_bwrite(r->connection->client, &buf[o], n);
  +            rv = ap_bwrite(r->connection->client, &buf[o], n, &w);
               if (w > 0) {
                   total_bytes_sent += w;
                   n -= w;
                   o += w;
               }
  -            else if (w < 0) {
  +            else if (rv != APR_SUCCESS) {
                   if (!ap_is_aborted(r->connection)) {
  -                    ap_log_rerror(APLOG_MARK, APLOG_INFO, errno, r,
  +                    ap_log_rerror(APLOG_MARK, APLOG_INFO, rv, r,
                           "client stopped connection before rflush completed");
                       ap_bsetflag(r->connection->client, B_EOUT, 1);
                       r->connection->aborted = 1;
  @@ -2159,7 +2161,9 @@
                                size_t length)
   {
       size_t total_bytes_sent = 0;
  -    int n, w;
  +    int n;
  +    ap_ssize_t w;
  +    ap_status_t rv;
   
       if (length == 0)
           return 0;
  @@ -2175,19 +2179,19 @@
           }
   
           while (n && !r->connection->aborted) {
  -            w = ap_bwrite(r->connection->client, (char *) mm + offset, n);
  +            rv = ap_bwrite(r->connection->client, (char *) mm + offset, n, &w);
               if (w > 0) {
                   total_bytes_sent += w;
                   n -= w;
                   offset += w;
               }
  -            else if (w < 0) {
  +            else if (rv != APR_SUCCESS) {
                   if (r->connection->aborted)
                       break;
  -                else if (errno == EAGAIN)
  +                else if (rv == EAGAIN)
                       continue;
                   else {
  -                    ap_log_rerror(APLOG_MARK, APLOG_INFO, errno, r,
  +                    ap_log_rerror(APLOG_MARK, APLOG_INFO, rv, r,
                        "client stopped connection before send mmap completed");
                       ap_bsetflag(r->connection->client, B_EOUT, 1);
                       r->connection->aborted = 1;
  @@ -2242,15 +2246,16 @@
   
   API_EXPORT(int) ap_rwrite(const void *buf, int nbyte, request_rec *r)
   {
  -    int n;
  +    ap_ssize_t n;
  +    ap_status_t rv;
   
       if (r->connection->aborted)
           return EOF;
   
  -    n = ap_bwrite(r->connection->client, buf, nbyte);
  +    rv = ap_bwrite(r->connection->client, buf, nbyte, &n);
       if (n < 0) {
           if (!r->connection->aborted) {
  -            ap_log_rerror(APLOG_MARK, APLOG_INFO, errno, r,
  +            ap_log_rerror(APLOG_MARK, APLOG_INFO, rv, r,
                   "client stopped connection before rwrite completed");
               ap_bsetflag(r->connection->client, B_EOUT, 1);
               r->connection->aborted = 1;
  @@ -2314,6 +2319,7 @@
       int i, j, k;
       const char *x;
       BUFF *fb = r->connection->client;
  +    ap_status_t rv;
   
       if (r->connection->aborted)
           return EOF;
  @@ -2324,11 +2330,11 @@
           if (x == NULL)
               break;
           j = strlen(x);
  -        i = ap_bwrite(fb, x, j);
  +        rv = ap_bwrite(fb, x, j, &i);
           if (i != j) {
               va_end(args);
               if (!r->connection->aborted) {
  -                ap_log_rerror(APLOG_MARK, APLOG_INFO, errno, r,
  +                ap_log_rerror(APLOG_MARK, APLOG_INFO, rv, r,
                       "client stopped connection before rvputs completed");
                   ap_bsetflag(r->connection->client, B_EOUT, 1);
                   r->connection->aborted = 1;
  
  
  
  1.16      +3 -1      apache-2.0/src/modules/standard/mod_cgi.c
  
  Index: mod_cgi.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_cgi.c,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -d -u -r1.15 -r1.16
  --- mod_cgi.c	1999/10/25 12:45:39	1.15
  +++ mod_cgi.c	1999/10/30 05:25:31	1.16
  @@ -538,6 +538,7 @@
        */
       if (ap_should_client_block(r)) {
   	int dbsize, len_read;
  +        ap_ssize_t bytes_written;
   
   	if (conf->logname) {
   	    dbuf = ap_pcalloc(r->pool, conf->bufbytes + 1);
  @@ -556,7 +557,8 @@
   		memcpy(dbuf + dbpos, argsbuffer, dbsize);
   		dbpos += dbsize;
   	    }
  -	    if (ap_bwrite(script_out, argsbuffer, len_read) < len_read) {
  +            (void) ap_bwrite(script_out, argsbuffer, len_read, &bytes_written);
  +	    if (bytes_written < len_read) {
   		/* silly script stopped reading, soak up remaining message */
   		while (ap_get_client_block(r, argsbuffer, HUGE_STRING_LEN) > 0) {
   		    /* dump it */
  
  
  
  1.13      +1 -1      apache-2.0/src/modules/standard/mod_echo.c
  
  Index: mod_echo.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_echo.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -d -u -r1.12 -r1.13
  --- mod_echo.c	1999/10/30 02:06:34	1.12
  +++ mod_echo.c	1999/10/30 05:25:32	1.13
  @@ -43,7 +43,7 @@
           (void) ap_bread(c->client,buf,sizeof buf,&r);
   	if(r <= 0)
   	    break;
  -	w=ap_bwrite(c->client,buf,r);
  +	(void) ap_bwrite(c->client,buf,r, &w);
   	if(w != r)
   	    break;
   	ap_bflush(c->client);