annotate src/core/ngx_list.c @ 7981:0b5f12d5c531

PCRE2 library support. The PCRE2 library is now used by default if found, instead of the original PCRE library. If needed for some reason, this can be disabled with the --without-pcre2 configure option. To make it possible to specify paths to the library and include files via --with-cc-opt / --with-ld-opt, the library is first tested without any additional paths and options. If this fails, the pcre2-config script is used. Similarly to the original PCRE library, it is now possible to build PCRE2 from sources with nginx configure, by using the --with-pcre= option. It automatically detects if PCRE or PCRE2 sources are provided. Note that compiling PCRE2 10.33 and later requires inttypes.h. When compiling on Windows with MSVC, inttypes.h is only available starting with MSVC 2013. In older versions some replacement needs to be provided ("echo '#include <stdint.h>' > pcre2-10.xx/src/inttypes.h" is good enough for MSVC 2010). The interface on nginx side remains unchanged.
author Maxim Dounin <mdounin@mdounin.ru>
date Sat, 25 Dec 2021 01:07:15 +0300
parents a82f305487c2
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
1
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 766
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
6
414
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
766
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
12 ngx_list_t *
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
13 ngx_list_create(ngx_pool_t *pool, ngx_uint_t n, size_t size)
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
14 {
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
15 ngx_list_t *list;
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
16
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
17 list = ngx_palloc(pool, sizeof(ngx_list_t));
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
18 if (list == NULL) {
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
19 return NULL;
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
20 }
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
21
5253
a82f305487c2 Simplified ngx_list_create().
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
22 if (ngx_list_init(list, pool, n, size) != NGX_OK) {
766
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
23 return NULL;
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
24 }
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
25
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
26 return list;
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
27 }
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
28
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
29
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
30 void *
791ea37bc944 ngx_list_create()
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
31 ngx_list_push(ngx_list_t *l)
414
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 {
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 void *elt;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 ngx_list_part_t *last;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 last = l->last;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 if (last->nelts == l->nalloc) {
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 /* the last part is full, allocate a new list part */
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
42 last = ngx_palloc(l->pool, sizeof(ngx_list_part_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
43 if (last == NULL) {
414
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 return NULL;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 }
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
47 last->elts = ngx_palloc(l->pool, l->nalloc * l->size);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
48 if (last->elts == NULL) {
414
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 return NULL;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 }
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 last->nelts = 0;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 last->next = NULL;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 l->last->next = last;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 l->last = last;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 }
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 elt = (char *) last->elts + l->size * last->nelts;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 last->nelts++;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 return elt;
388a842cbbe1 nginx-0.0.10-2004-09-03-19:50:30 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 }