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/27 00:25:04 UTC

cvs commit: apache-2.0/src/main buff.c http_connection.c http_protocol.c

manoj       99/10/26 15:25:03

  Modified:    src      CHANGES
               src/main buff.c http_connection.c http_protocol.c
  Log:
  ap_bflush and ap_bclose now return ap_status_t error codes instead of
  returning -1 and setting errno.
  
  Revision  Changes    Path
  1.13      +3 -0      apache-2.0/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/CHANGES,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -d -u -r1.12 -r1.13
  --- CHANGES	1999/10/23 21:20:15	1.12
  +++ CHANGES	1999/10/26 22:25:00	1.13
  @@ -1,5 +1,8 @@
   Changes with Apache 2.0-dev
   
  +  *) ap_bflush and ap_bclose now return ap_status_t error codes instead
  +     of returning -1 and setting errno. [Manoj Kasichainula]
  +
     *) mod_speling runs in 2.0-dev now: a bug in readdir_r handling and
        interface adaption to APR functions did it. [Martin Kraemer]
   
  
  
  
  1.17      +36 -37    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.16
  retrieving revision 1.17
  diff -u -d -u -r1.16 -r1.17
  --- buff.c	1999/10/26 20:43:46	1.16
  +++ buff.c	1999/10/26 22:25:01	1.17
  @@ -718,32 +718,36 @@
   }
   
   
  -static int bflush_core(BUFF *fb)
  +static ap_status_t bflush_core(BUFF *fb, ap_ssize_t *bytes_written)
   {
  -    int total;
  -    ap_ssize_t bytes_written;
  +    ap_status_t rv;
  +    ap_ssize_t n;
   
       if (fb->flags & B_CHUNK) {
   	end_chunk(fb, 0);
       }
  -    total = 0;
  +    *bytes_written = 0;
       while (fb->outcnt > 0) {
  -	(void) write_with_errors(fb, fb->outbase + total, fb->outcnt,
  -                                 &bytes_written);
  -	if (bytes_written <= 0) {       /* error or eof */
  -	    if (total) {
  -		memmove(fb->outbase, fb->outbase + total, fb->outcnt);
  -		return total;
  +	rv = write_with_errors(fb, fb->outbase + *bytes_written, fb->outcnt,
  +                                 &n);
  +	if (n <= 0) {       /* error or eof */
  +	    if (*bytes_written) {
  +		memmove(fb->outbase, fb->outbase + *bytes_written, fb->outcnt);
  +#ifdef MIDWAY_ERROR_RETURNS_ERROR_BLAH_BLAH_BLAH
  +                return rv;
  +#else
  +		return APR_SUCCESS;
  +#endif
   	    }
  -	    return -1;
  +	    return rv;
   	}
  -	fb->outcnt -= bytes_written;
  -	total += bytes_written;
  +	fb->outcnt -= n;
  +	*bytes_written += n;
       }
       if (fb->flags & B_CHUNK) {
   	start_chunk(fb);
       }
  -    return total;
  +    return APR_SUCCESS;
   }
   
   
  @@ -758,6 +762,8 @@
   {
       int amt;
       int total;
  +    ap_ssize_t n;
  +    ap_status_t rv;
   
       if (fb->flags & (B_WRERR | B_EOUT)) {
   	errno = fb->saved_errno;
  @@ -775,7 +781,6 @@
    */
       if (!(fb->flags & B_WR)
   	|| (nbyte > LARGE_WRITE_THRESHOLD && nbyte + fb->outcnt >= fb->bufsiz)) {
  -        ap_status_t rv;
           ap_ssize_t n;
   
   	if (fb->flags & B_CHUNK) {
  @@ -799,7 +804,8 @@
   	fb->outcnt += amt;
   	buf = (const char *) buf + amt;
   	nbyte -= amt;
  -	if (bflush_core(fb) < amt) {
  +        (void) bflush_core(fb, &n);
  +	if (n < amt) {
   	    return amt;
   	}
   	total = amt;
  @@ -812,18 +818,18 @@
   
   /*
    * Flushes the buffered stream.
  - * Returns 0 on success or -1 on error
    */
  -API_EXPORT(int) ap_bflush(BUFF *fb)
  +API_EXPORT(ap_status_t) ap_bflush(BUFF *fb)
   {
  -    int ret;
  -
  -    if ((fb->flags & (B_WRERR | B_EOUT | B_WR)) != B_WR)
  -	return -1;
  -
  -    ret = bflush_core(fb);
  +    ap_ssize_t n;       /* Placeholder; not ever used */
   
  -    return ret;
  +    if ((fb->flags & (B_EOUT | B_WR)) != B_WR) {
  +        return APR_EINVAL;
  +    }
  +    if ((fb->flags & B_WRERR) != 0) {
  +        return fb->saved_errno;
  +    }
  +    return bflush_core(fb, &n);
   }
   
   /*
  @@ -832,23 +838,16 @@
    * Sets the EOF flag to indicate no futher data can be read,
    * and the EOUT flag to indicate no further data can be written.
    */
  -API_EXPORT(int) ap_bclose(BUFF *fb)
  +API_EXPORT(ap_status_t) ap_bclose(BUFF *fb)
   {
  -    int rc1, rc2;
  +    ap_status_t rc1, rc2;
   
       if (fb->flags & B_WR)
   	rc1 = ap_bflush(fb);
       else
  -	rc1 = 0;
  +	rc1 = APR_SUCCESS;
       ap_kill_cleanup(fb->pool, fb, bcleanup);
       rc2 = iol_close(fb->iol);
  -    if (rc2 == APR_SUCCESS) {
  -        rc2 = 0;
  -    }
  -    else {
  -        errno = rc2;
  -        rc2 = -1;
  -    }
   
       fb->inptr = fb->inbase;
       fb->incnt = 0;
  @@ -856,7 +855,7 @@
   
       fb->flags |= B_EOF | B_EOUT;
   
  -    if (rc1 != 0)
  +    if (rc1 != APR_SUCCESS)
   	return rc1;
       return rc2;
   }
  @@ -921,7 +920,7 @@
   
       fb->outcnt += b->vbuff.curpos - (char *)&fb->outbase[fb->outcnt];
       if (fb->outcnt == fb->bufsiz) {
  -	if (ap_bflush(fb)) {
  +	if (ap_bflush(fb) != APR_SUCCESS) {
   	    return -1;
   	}
       }
  
  
  
  1.23      +1 -1      apache-2.0/src/main/http_connection.c
  
  Index: http_connection.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_connection.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -d -u -r1.22 -r1.23
  --- http_connection.c	1999/10/24 05:59:18	1.22
  +++ http_connection.c	1999/10/26 22:25:02	1.23
  @@ -146,7 +146,7 @@
   
       /* Send any leftover data to the client, but never try to again */
   
  -    if (ap_bflush(r->connection->client) == -1) {
  +    if (ap_bflush(r->connection->client) != APR_SUCCESS) {
   	ap_bclose(r->connection->client);
   	return;
       }
  
  
  
  1.26      +5 -2      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.25
  retrieving revision 1.26
  diff -u -d -u -r1.25 -r1.26
  --- http_protocol.c	1999/10/26 22:15:16	1.25
  +++ http_protocol.c	1999/10/26 22:25:02	1.26
  @@ -2339,13 +2339,16 @@
   
   API_EXPORT(int) ap_rflush(request_rec *r)
   {
  -    if (ap_bflush(r->connection->client) < 0) {
  +    ap_status_t rv;
  +
  +    if ((rv = ap_bflush(r->connection->client)) != 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;
           }
  +        errno = rv;
           return EOF;
       }
       return 0;