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
This page was automatically generated by the
LXR engine.
Visit the LXR main site for more
information.