~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Nginx/core/ngx_list.c

Version: ~ [ nginx-0.8.20 ] ~ [ nginx-0.7.62 ] ~ [ nginx-0.6.39 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.