rbb         99/09/07 14:24:45

  Modified:    src/lib/apr/file_io/unix open.c readwrite.c
               src/lib/apr/lib apr_pools.c
               src/lib/apr/network_io/unix sockets.c
  Log:
  Allor ap_palloc to work without a pool.  Basically, this just uses malloc.
  This also sets us up to allow multiple allocation methods in the same program.
  Also fix some minor bugs I found.
  
  Revision  Changes    Path
  1.7       +0 -3      apache-2.0/src/lib/apr/file_io/unix/open.c
  
  Index: open.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/open.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- open.c    1999/09/07 13:38:26     1.6
  +++ open.c    1999/09/07 21:24:37     1.7
  @@ -250,9 +250,6 @@
                               ap_os_file_t *thefile)
   {
       int *dafile = thefile;
  -    if (cont == NULL) {
  -        return APR_ENOCONT;
  -    }
       if ((*file) == NULL) {
           (*file) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t));
           (*file)->cntxt = cont;
  
  
  
  1.5       +1 -0      apache-2.0/src/lib/apr/file_io/unix/readwrite.c
  
  Index: readwrite.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/readwrite.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- readwrite.c       1999/09/07 12:36:23     1.4
  +++ readwrite.c       1999/09/07 21:24:38     1.5
  @@ -263,6 +263,7 @@
           if (rv != 1) {
               return errno;
           }
  +        i++;
       }
       return APR_SUCCESS; 
   }
  
  
  
  1.5       +41 -19    apache-2.0/src/lib/apr/lib/apr_pools.c
  
  Index: apr_pools.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/lib/apr_pools.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- apr_pools.c       1999/08/31 05:32:35     1.4
  +++ apr_pools.c       1999/09/07 21:24:42     1.5
  @@ -772,18 +772,33 @@
        * Round up requested size to an even number of alignment units
        * (core clicks)
        */
  -    ap_pool_t *a = c->pool;
  -    int nclicks = 1 + ((reqsize - 1) / CLICK_SZ);
  -    int size = nclicks * CLICK_SZ;
  +    ap_pool_t *a;
  +    int nclicks;
  +    int size;
   
       /* First, see if we have space in the block most recently
        * allocated to this pool
        */
   
  -    union block_hdr *blok = a->last;
  -    char *first_avail = blok->h.first_avail;
  +    union block_hdr *blok;
  +    char *first_avail;
       char *new_first_avail;
   
  +    if (c == NULL) {
  +        return malloc(reqsize);
  +    }
  +    a = c->pool;
  +    nclicks = 1 + ((reqsize - 1) / CLICK_SZ);
  +    size = nclicks * CLICK_SZ;
  +
  +    /* First, see if we have space in the block most recently
  +     * allocated to this pool
  +     */
  +
  +    blok = a->last;
  +    first_avail = blok->h.first_avail;
  +    new_first_avail;
  +
       if (reqsize <= 0) {
        return NULL;
       }
  @@ -1066,28 +1081,35 @@
                                      ap_status_t (*child_cleanup) (void *))
   {
       struct cleanup *c;
  -    c = (struct cleanup *) ap_palloc(p, sizeof(struct cleanup));
  -    c->data = data;
  -    c->plain_cleanup = plain_cleanup;
  -    c->child_cleanup = child_cleanup;
  -    c->next = p->pool->cleanups;
  -    p->pool->cleanups = c;
  +
  +    if (p != NULL) {
  +        c = (struct cleanup *) ap_palloc(p, sizeof(struct cleanup));
  +        c->data = data;
  +        c->plain_cleanup = plain_cleanup;
  +        c->child_cleanup = child_cleanup;
  +        c->next = p->pool->cleanups;
  +        p->pool->cleanups = c;
  +    }
   }
   
   API_EXPORT(void) ap_kill_cleanup(struct context_t *p, void *data,
                                  ap_status_t (*cleanup) (void *))
   {
  -    struct cleanup *c = p->pool->cleanups;
  -    struct cleanup **lastp = &p->pool->cleanups;
  +    struct cleanup *c;
  +    struct cleanup **lastp;
   
  +    if (p == NULL)
  +        return;
  +    c = p->pool->cleanups;
  +    lastp = &p->pool->cleanups;
       while (c) {
  -     if (c->data == data && c->plain_cleanup == cleanup) {
  -         *lastp = c->next;
  -         break;
  -     }
  +        if (c->data == data && c->plain_cleanup == cleanup) {
  +            *lastp = c->next;
  +            break;
  +        }
   
  -     lastp = &c->next;
  -     c = c->next;
  +        lastp = &c->next;
  +        c = c->next;
       }
   }
   
  
  
  
  1.5       +1 -1      apache-2.0/src/lib/apr/network_io/unix/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/unix/sockets.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- sockets.c 1999/09/04 00:21:16     1.4
  +++ sockets.c 1999/09/07 21:24:44     1.5
  @@ -364,7 +364,7 @@
       if (sock == NULL) {
           return APR_ENOSOCKET;
       }
  -    thesock = &(sock->socketdes);
  +    *thesock = sock->socketdes;
       return APR_SUCCESS;
   }
   
  
  
  

Reply via email to