diff options
Diffstat (limited to 'src/core/ngx_list.c')
-rw-r--r-- | src/core/ngx_list.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/core/ngx_list.c b/src/core/ngx_list.c new file mode 100644 index 000000000..10d79575f --- /dev/null +++ b/src/core/ngx_list.c @@ -0,0 +1,36 @@ + +#include <ngx_config.h> +#include <ngx_core.h> + + +void *ngx_push_list(ngx_list_t *l) +{ + void *elt; + ngx_list_part_t *last; + + last = l->last; + + if (last->nelts == l->nalloc) { + + /* the last part is full, allocate a new list part */ + + if (!(last = ngx_palloc(l->pool, sizeof(ngx_list_part_t)))) { + return NULL; + } + + if (!(last->elts = ngx_palloc(l->pool, l->nalloc * l->size))) { + return NULL; + } + + last->nelts = 0; + last->next = NULL; + + l->last->next = last; + l->last = last; + } + + elt = (char *) last->elts + l->size * last->nelts; + last->nelts++; + + return elt; +} |