0
|
1
|
|
2 /*
|
|
3 * Copyright (C) Igor Sysoev
|
|
4 */
|
|
5
|
|
6
|
|
7 #include <ngx_config.h>
|
|
8 #include <ngx_core.h>
|
|
9
|
|
10
|
|
11 void *ngx_list_push(ngx_list_t *l)
|
|
12 {
|
|
13 void *elt;
|
|
14 ngx_list_part_t *last;
|
|
15
|
|
16 last = l->last;
|
|
17
|
|
18 if (last->nelts == l->nalloc) {
|
|
19
|
|
20 /* the last part is full, allocate a new list part */
|
|
21
|
|
22 if (!(last = ngx_palloc(l->pool, sizeof(ngx_list_part_t)))) {
|
|
23 return NULL;
|
|
24 }
|
|
25
|
|
26 if (!(last->elts = ngx_palloc(l->pool, l->nalloc * l->size))) {
|
|
27 return NULL;
|
|
28 }
|
|
29
|
|
30 last->nelts = 0;
|
|
31 last->next = NULL;
|
|
32
|
|
33 l->last->next = last;
|
|
34 l->last = last;
|
|
35 }
|
|
36
|
|
37 elt = (char *) last->elts + l->size * last->nelts;
|
|
38 last->nelts++;
|
|
39
|
|
40 return elt;
|
|
41 }
|