aboutsummaryrefslogtreecommitdiffstats
path: root/app/nginx/src/core/ngx_list.c
diff options
context:
space:
mode:
Diffstat (limited to 'app/nginx/src/core/ngx_list.c')
-rw-r--r--app/nginx/src/core/ngx_list.c63
1 files changed, 63 insertions, 0 deletions
diff --git a/app/nginx/src/core/ngx_list.c b/app/nginx/src/core/ngx_list.c
new file mode 100644
index 0000000..d0eb159
--- /dev/null
+++ b/app/nginx/src/core/ngx_list.c
@@ -0,0 +1,63 @@
+
+/*
+ * Copyright (C) Igor Sysoev
+ * Copyright (C) Nginx, Inc.
+ */
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+
+
+ngx_list_t *
+ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size)
+{
+ ngx_list_t *list;
+
+ list = ngx_palloc(pool, sizeof(ngx_list_t));
+ if (list == NULL) {
+ return NULL;
+ }
+
+ if (ngx_list_init(list, pool, n, size) != NGX_OK) {
+ return NULL;
+ }
+
+ return list;
+}
+
+
+void *
+ngx_list_push(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 */
+
+ last = ngx_palloc(l->pool, sizeof(ngx_list_part_t));
+ if (last == NULL) {
+ return NULL;
+ }
+
+ last->elts = ngx_palloc(l->pool, l->nalloc * l->size);
+ if (last->elts == NULL) {
+ 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;
+}