manoj       99/10/29 19:06:35

  Modified:    src      CHANGES
               src/include buff.h
               src/main buff.c http_protocol.c
               src/modules/standard mod_echo.c mod_mime_magic.c
  Log:
  Change ap_bread's interface to no longer require errno.
  
  Revision  Changes    Path
  1.15      +2 -4      apache-2.0/src/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/CHANGES,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -d -u -r1.14 -r1.15
  --- CHANGES   1999/10/26 22:42:33     1.14
  +++ CHANGES   1999/10/30 02:06:31     1.15
  @@ -1,9 +1,7 @@
   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. And error functions recorded
  -     with ap_bonerror now take a status code as an argument. [Manoj
  -     Kasichainula]
  +  *) Large sections of buff, including the APIs, have been converted to
  +     no longer use 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.7       +2 -1      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.6
  retrieving revision 1.7
  diff -u -d -u -r1.6 -r1.7
  --- buff.h    1999/10/26 22:53:55     1.6
  +++ buff.h    1999/10/30 02:06:32     1.7
  @@ -182,7 +182,8 @@
                                void *data);
   
   /* I/O */
  -API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte);
  +API_EXPORT(ap_status_t) ap_bread(BUFF *fb, void *buf, ap_size_t nbyte,
  +                                 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);
  
  
  
  1.19      +35 -24    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.18
  retrieving revision 1.19
  diff -u -d -u -r1.18 -r1.19
  --- buff.c    1999/10/26 22:42:46     1.18
  +++ buff.c    1999/10/30 02:06:32     1.19
  @@ -334,19 +334,21 @@
   /*
    * Read up to nbyte bytes into buf.
    * If fewer than byte bytes are currently available, then return those.
  - * Returns 0 for EOF, -1 for error.
    */
  -API_EXPORT(int) ap_bread(BUFF *fb, void *buf, int nbyte)
  +API_EXPORT(ap_status_t) ap_bread(BUFF *fb, void *buf, ap_size_t nbyte,
  +                                 ap_ssize_t *bytes_read)
   {
       int i, nrd;
       ap_status_t rv;
   
       if (fb->flags & B_RDERR) {
  -     errno = fb->saved_errno;
  -     return -1;
  +        *bytes_read = 0;
  +     return fb->saved_errno;
       }
  -    if (nbyte == 0)
  -     return 0;
  +    if (nbyte == 0) {
  +        *bytes_read = 0;
  +     return APR_SUCCESS;
  +    }
   
       if (!(fb->flags & B_RD)) {
        /* Unbuffered reading.  First check if there was something in the
  @@ -356,14 +358,10 @@
            memcpy(buf, fb->inptr, i);
            fb->incnt -= i;
            fb->inptr += i;
  -         return i;
  +            *bytes_read = i;
  +         return APR_SUCCESS;
        }
  -     rv = read_with_errors(fb, buf, nbyte, &i);
  -        if (rv == APR_SUCCESS) {
  -            return i;
  -        }
  -        errno = rv;
  -        return -1;
  +     return read_with_errors(fb, buf, nbyte, bytes_read);
       }
   
       nrd = fb->incnt;
  @@ -372,7 +370,8 @@
        memcpy(buf, fb->inptr, nbyte);
        fb->incnt = nrd - nbyte;
        fb->inptr += nbyte;
  -     return nbyte;
  +        *bytes_read = nbyte;
  +     return APR_SUCCESS;
       }
   
       if (nrd > 0) {
  @@ -381,16 +380,22 @@
        buf = nrd + (char *) buf;
        fb->incnt = 0;
       }
  -    if (fb->flags & B_EOF)
  -     return nrd;
  +    if (fb->flags & B_EOF) {
  +        *bytes_read = nrd;
  +     return APR_SUCCESS;
  +    }
   
   /* do a single read */
       if (nbyte >= fb->bufsiz) {
   /* read directly into caller's buffer */
        rv = read_with_errors(fb, buf, nbyte, &i);
        if (rv != APR_SUCCESS) {
  -            errno = rv;
  -         return nrd ? nrd : -1;
  +            *bytes_read = nrd;
  +#ifdef MIDWAY_ERROR_RETURNS_ERROR_BLAH_BLAH_BLAH
  +            return rv;
  +#else
  +         return *bytes_read ? APR_SUCCESS : rv;
  +#endif
        }
       }
       else {
  @@ -398,8 +403,12 @@
        fb->inptr = fb->inbase;
        rv = read_with_errors(fb, fb->inptr, fb->bufsiz, &i);
        if (rv != APR_SUCCESS) {
  -            errno = rv;
  -         return nrd ? nrd : -1;
  +            *bytes_read = nrd;
  +#ifdef MIDWAY_ERROR_RETURNS_ERROR_BLAH_BLAH_BLAH
  +            return rv;
  +#else
  +         return *bytes_read ? APR_SUCCESS : rv;
  +#endif
        }
        fb->incnt = i;
        if (i > nbyte)
  @@ -408,7 +417,8 @@
        fb->incnt -= i;
        fb->inptr += i;
       }
  -    return nrd + i;
  +    *bytes_read = nrd + i;
  +    return APR_SUCCESS;
   }
   
   
  @@ -529,11 +539,12 @@
    */
   API_EXPORT(int) ap_bfilbuf(BUFF *fb)
   {
  -    int i;
  +    ap_status_t rv;
  +    ap_ssize_t i;
       char buf[1];
   
  -    i = ap_bread(fb, buf, 1);
  -    if (i == 0)
  +    rv = ap_bread(fb, buf, 1, &i);
  +    if (rv == APR_SUCCESS && i == 0)
        errno = 0;              /* no error; EOF */
       if (i != 1)
        return EOF;
  
  
  
  1.27      +21 -15    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.26
  retrieving revision 1.27
  diff -u -d -u -r1.26 -r1.27
  --- http_protocol.c   1999/10/26 22:25:02     1.26
  +++ http_protocol.c   1999/10/30 02:06:33     1.27
  @@ -1813,17 +1813,21 @@
   API_EXPORT(long) ap_get_client_block(request_rec *r, char *buffer, int 
bufsiz)
   {
       int c;
  -    long len_read, len_to_read;
  +    ap_size_t len_to_read;
  +    ap_ssize_t len_read;
       long chunk_start = 0;
       unsigned long max_body;
  +    ap_status_t rv;
   
       if (!r->read_chunked) {     /* Content-length read */
           len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
  -        len_read = ap_bread(r->connection->client, buffer, len_to_read);
  -        if (len_read <= 0) {
  -            if (len_read < 0)
  +        rv = ap_bread(r->connection->client, buffer, len_to_read, &len_read);
  +        if (len_read == 0) {    /* error or eof */
  +            if (rv != APR_SUCCESS) {
                   r->connection->keepalive = -1;
  -            return len_read;
  +                return -1;
  +            }
  +            return 0;
           }
           r->read_length += len_read;
           r->remaining -= len_read;
  @@ -1931,8 +1935,8 @@
   
       len_to_read = (r->remaining > bufsiz) ? bufsiz : r->remaining;
   
  -    len_read = ap_bread(r->connection->client, buffer, len_to_read);
  -    if (len_read <= 0) {
  +    (void) ap_bread(r->connection->client, buffer, len_to_read, &len_read);
  +    if (len_read == 0) {        /* error or eof */
           r->connection->keepalive = -1;
           return -1;
       }
  @@ -2072,7 +2076,9 @@
       char buf[IOBUFSIZE];
       long total_bytes_sent = 0;
       long zero_timeout = 0;
  -    int n, w, o;
  +    int w, o;
  +    ap_ssize_t n;
  +    ap_status_t rv;
   
       if (length == 0) {
           return 0;
  @@ -2085,13 +2091,13 @@
   
       ap_bsetopt(fb, BO_TIMEOUT, &zero_timeout);
       while (!ap_is_aborted(r->connection)) {
  -        n = ap_bread(fb, buf, sizeof(buf));
  -        if (n <= 0) {
  -            if (n == 0) {
  +        rv = ap_bread(fb, buf, sizeof(buf), &n);
  +        if (n == 0) {
  +            if (rv == APR_SUCCESS) {    /* eof */
                   (void) ap_rflush(r);
                   break;
               }
  -            if (n == -1 && errno != EAGAIN) {
  +            if (rv != APR_EAGAIN) {
                   r->connection->aborted = 1;
                   break;
               }
  @@ -2101,9 +2107,9 @@
               }
   
               ap_bsetopt(fb, BO_TIMEOUT, &r->server->timeout);
  -            n = ap_bread(fb, buf, sizeof(buf));
  -            if (n <= 0) {
  -                if (n == 0) {
  +            rv = ap_bread(fb, buf, sizeof(buf), &n);
  +            if (n == 0) {
  +                if (rv == APR_SUCCESS) {        /* eof */
                       (void) ap_rflush(r);
                   }
                   r->connection->aborted = 1;
  
  
  
  1.12      +2 -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.11
  retrieving revision 1.12
  diff -u -d -u -r1.11 -r1.12
  --- mod_echo.c        1999/08/31 05:33:48     1.11
  +++ mod_echo.c        1999/10/30 02:06:34     1.12
  @@ -39,7 +39,8 @@
       for( ; ; )
        {
        int w;
  -     int r=ap_bread(c->client,buf,sizeof buf);
  +     int r;
  +        (void) ap_bread(c->client,buf,sizeof buf,&r);
        if(r <= 0)
            break;
        w=ap_bwrite(c->client,buf,r);
  
  
  
  1.7       +4 -2      apache-2.0/src/modules/standard/mod_mime_magic.c
  
  Index: mod_mime_magic.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_mime_magic.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -d -u -r1.6 -r1.7
  --- mod_mime_magic.c  1999/10/22 16:01:27     1.6
  +++ mod_mime_magic.c  1999/10/30 02:06:34     1.7
  @@ -2173,6 +2173,7 @@
       struct uncompress_parms parm;
       BUFF *bout;
       ap_context_t *sub_pool;
  +    ap_status_t rv;
   
       parm.r = r;
       parm.method = method;
  @@ -2192,9 +2193,10 @@
       }
   
       *newch = (unsigned char *) ap_palloc(r->pool, n);
  -    if ((n = ap_bread(bout, *newch, n)) <= 0) {
  +    rv = ap_bread(bout, *newch, n, &n);
  +    if (n == 0) {
        ap_destroy_pool(sub_pool);
  -     ap_log_rerror(APLOG_MARK, APLOG_ERR, errno, r,
  +     ap_log_rerror(APLOG_MARK, APLOG_ERR, rv, r,
            MODNAME ": read failed %s", r->filename);
        return -1;
       }
  
  
  

Reply via email to