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
|
50
|
22 last = ngx_palloc(l->pool, sizeof(ngx_list_part_t));
|
|
23 if (last == NULL) {
|
0
|
24 return NULL;
|
|
25 }
|
|
26
|
50
|
27 last->elts = ngx_palloc(l->pool, l->nalloc * l->size);
|
|
28 if (last->elts == NULL) {
|
0
|
29 return NULL;
|
|
30 }
|
|
31
|
|
32 last->nelts = 0;
|
|
33 last->next = NULL;
|
|
34
|
|
35 l->last->next = last;
|
|
36 l->last = last;
|
|
37 }
|
|
38
|
|
39 elt = (char *) last->elts + l->size * last->nelts;
|
|
40 last->nelts++;
|
|
41
|
|
42 return elt;
|
|
43 }
|