Annotation of embedaddon/nginx/src/core/ngx_list.c, revision 1.1.1.1

1.1       misho       1: 
                      2: /*
                      3:  * Copyright (C) Igor Sysoev
                      4:  * Copyright (C) Nginx, Inc.
                      5:  */
                      6: 
                      7: 
                      8: #include <ngx_config.h>
                      9: #include <ngx_core.h>
                     10: 
                     11: 
                     12: ngx_list_t *
                     13: ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size)
                     14: {
                     15:     ngx_list_t  *list;
                     16: 
                     17:     list = ngx_palloc(pool, sizeof(ngx_list_t));
                     18:     if (list == NULL) {
                     19:         return NULL;
                     20:     }
                     21: 
                     22:     list->part.elts = ngx_palloc(pool, n * size);
                     23:     if (list->part.elts == NULL) {
                     24:         return NULL;
                     25:     }
                     26: 
                     27:     list->part.nelts = 0;
                     28:     list->part.next = NULL;
                     29:     list->last = &list->part;
                     30:     list->size = size;
                     31:     list->nalloc = n;
                     32:     list->pool = pool;
                     33: 
                     34:     return list;
                     35: }
                     36: 
                     37: 
                     38: void *
                     39: ngx_list_push(ngx_list_t *l)
                     40: {
                     41:     void             *elt;
                     42:     ngx_list_part_t  *last;
                     43: 
                     44:     last = l->last;
                     45: 
                     46:     if (last->nelts == l->nalloc) {
                     47: 
                     48:         /* the last part is full, allocate a new list part */
                     49: 
                     50:         last = ngx_palloc(l->pool, sizeof(ngx_list_part_t));
                     51:         if (last == NULL) {
                     52:             return NULL;
                     53:         }
                     54: 
                     55:         last->elts = ngx_palloc(l->pool, l->nalloc * l->size);
                     56:         if (last->elts == NULL) {
                     57:             return NULL;
                     58:         }
                     59: 
                     60:         last->nelts = 0;
                     61:         last->next = NULL;
                     62: 
                     63:         l->last->next = last;
                     64:         l->last = last;
                     65:     }
                     66: 
                     67:     elt = (char *) last->elts + l->size * last->nelts;
                     68:     last->nelts++;
                     69: 
                     70:     return elt;
                     71: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>