annotate src/core/ngx_string.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 dfd8dfb436e5
children a10210a45c8b
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: 409
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: 409
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: 4312
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: 409
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: 409
diff changeset
6
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
9 #include <ngx_core.h>
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
12 static u_char *ngx_sprintf_num(u_char *buf, u_char *last, uint64_t ui64,
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
13 u_char zero, ngx_uint_t hexadecimal, ngx_uint_t width);
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
14 static u_char *ngx_sprintf_str(u_char *buf, u_char *last, u_char *src,
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
15 size_t len, ngx_uint_t hexadecimal);
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
16 static void ngx_encode_base64_internal(ngx_str_t *dst, ngx_str_t *src,
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
17 const u_char *basis, ngx_uint_t padding);
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
18 static ngx_int_t ngx_decode_base64_internal(ngx_str_t *dst, ngx_str_t *src,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
19 const u_char *basis);
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
20
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
21
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
22 void
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
23 ngx_strlow(u_char *dst, u_char *src, size_t n)
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
24 {
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
25 while (n) {
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
26 *dst = ngx_tolower(*src);
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
27 dst++;
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
28 src++;
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
29 n--;
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
30 }
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
31 }
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
32
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2125
diff changeset
33
7120
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
34 size_t
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
35 ngx_strnlen(u_char *p, size_t n)
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
36 {
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
37 size_t i;
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
38
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
39 for (i = 0; i < n; i++) {
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
40
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
41 if (p[i] == '\0') {
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
42 return i;
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
43 }
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
44 }
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
45
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
46 return n;
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
47 }
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
48
874171c3c71a Fixed handling of non-null-terminated unix sockets.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7067
diff changeset
49
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
50 u_char *
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
51 ngx_cpystrn(u_char *dst, u_char *src, size_t n)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 {
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
53 if (n == 0) {
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 return dst;
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
55 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
2919
41e7d9153967 change surplus for() to while()
Igor Sysoev <igor@sysoev.ru>
parents: 2763
diff changeset
57 while (--n) {
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 *dst = *src;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
60 if (*dst == '\0') {
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 return dst;
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
62 }
2919
41e7d9153967 change surplus for() to while()
Igor Sysoev <igor@sysoev.ru>
parents: 2763
diff changeset
63
41e7d9153967 change surplus for() to while()
Igor Sysoev <igor@sysoev.ru>
parents: 2763
diff changeset
64 dst++;
41e7d9153967 change surplus for() to while()
Igor Sysoev <igor@sysoev.ru>
parents: 2763
diff changeset
65 src++;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 *dst = '\0';
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 return dst;
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 }
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
72
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
73
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
74 u_char *
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
75 ngx_pstrdup(ngx_pool_t *pool, ngx_str_t *src)
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
76 {
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
77 u_char *dst;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
78
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 1956
diff changeset
79 dst = ngx_pnalloc(pool, src->len);
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
80 if (dst == NULL) {
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
81 return NULL;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
82 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
83
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
84 ngx_memcpy(dst, src->data, src->len);
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
85
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
86 return dst;
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
87 }
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
88
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
89
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
90 /*
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
91 * supported formats:
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 467
diff changeset
92 * %[0][width][x][X]O off_t
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
93 * %[0][width]T time_t
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
94 * %[0][width][u][x|X]z ssize_t/size_t
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
95 * %[0][width][u][x|X]d int/u_int
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
96 * %[0][width][u][x|X]l long
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
97 * %[0][width|m][u][x|X]i ngx_int_t/ngx_uint_t
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
98 * %[0][width][u][x|X]D int32_t/uint32_t
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
99 * %[0][width][u][x|X]L int64_t/uint64_t
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
100 * %[0][width|m][u][x|X]A ngx_atomic_int_t/ngx_atomic_uint_t
3506
c3fa65192119 use double in %f format to allow %.15f precision
Igor Sysoev <igor@sysoev.ru>
parents: 3486
diff changeset
101 * %[0][width][.width]f double, max valid number fits to %18.15f
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
102 * %P ngx_pid_t
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
103 * %M ngx_msec_t
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
104 * %r rlim_t
1406
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
105 * %p void *
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
106 * %[x|X]V ngx_str_t *
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
107 * %[x|X]v ngx_variable_value_t *
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
108 * %[x|X]s null-terminated string
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
109 * %*[x|X]s length and string
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
110 * %Z '\0'
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
111 * %N '\n'
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
112 * %c char
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
113 * %% %
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
114 *
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
115 * reserved:
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
116 * %t ptrdiff_t
3046
52e984126b2c fix typo
Igor Sysoev <igor@sysoev.ru>
parents: 2919
diff changeset
117 * %S null-terminated wchar string
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
118 * %C wchar
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
119 */
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
120
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
121
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
122 u_char * ngx_cdecl
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
123 ngx_sprintf(u_char *buf, const char *fmt, ...)
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
124 {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
125 u_char *p;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
126 va_list args;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
127
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
128 va_start(args, fmt);
2763
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
129 p = ngx_vslprintf(buf, (void *) -1, fmt, args);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
130 va_end(args);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
131
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
132 return p;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
133 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
134
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
135
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
136 u_char * ngx_cdecl
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
137 ngx_snprintf(u_char *buf, size_t max, const char *fmt, ...)
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
138 {
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
139 u_char *p;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
140 va_list args;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
141
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
142 va_start(args, fmt);
2763
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
143 p = ngx_vslprintf(buf, buf + max, fmt, args);
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
144 va_end(args);
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
145
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
146 return p;
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
147 }
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
148
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
149
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
150 u_char * ngx_cdecl
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
151 ngx_slprintf(u_char *buf, u_char *last, const char *fmt, ...)
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
152 {
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
153 u_char *p;
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
154 va_list args;
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
155
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
156 va_start(args, fmt);
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
157 p = ngx_vslprintf(buf, last, fmt, args);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
158 va_end(args);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
159
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
160 return p;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
161 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
162
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
163
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
164 u_char *
2763
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
165 ngx_vslprintf(u_char *buf, u_char *last, const char *fmt, va_list args)
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
166 {
2763
819bea4e964e ngx_vslprintf(), ngx_slprintf()
Igor Sysoev <igor@sysoev.ru>
parents: 2680
diff changeset
167 u_char *p, zero;
1310
33d6c994a0b2 Sun Studio on sparc uses different bit order
Igor Sysoev <igor@sysoev.ru>
parents: 1298
diff changeset
168 int d;
4604
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
169 double f;
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
170 size_t slen;
1310
33d6c994a0b2 Sun Studio on sparc uses different bit order
Igor Sysoev <igor@sysoev.ru>
parents: 1298
diff changeset
171 int64_t i64;
4604
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
172 uint64_t ui64, frac;
1310
33d6c994a0b2 Sun Studio on sparc uses different bit order
Igor Sysoev <igor@sysoev.ru>
parents: 1298
diff changeset
173 ngx_msec_t ms;
4604
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
174 ngx_uint_t width, sign, hex, max_width, frac_width, scale, n;
1406
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
175 ngx_str_t *v;
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
176 ngx_variable_value_t *vv;
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
177
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
178 while (*fmt && buf < last) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
179
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
180 /*
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
181 * "buf < last" means that we could copy at least one character:
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
182 * the plain character, "%%", "%c", and minus without the checking
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
183 */
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
184
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
185 if (*fmt == '%') {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
186
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
187 i64 = 0;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
188 ui64 = 0;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
189
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
190 zero = (u_char) ((*++fmt == '0') ? '0' : ' ');
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
191 width = 0;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
192 sign = 1;
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
193 hex = 0;
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
194 max_width = 0;
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
195 frac_width = 0;
1863
8382d94ba6ae allow zero length in %*s
Igor Sysoev <igor@sysoev.ru>
parents: 1773
diff changeset
196 slen = (size_t) -1;
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
197
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
198 while (*fmt >= '0' && *fmt <= '9') {
7067
e3723f2a11b7 Parenthesized ASCII-related calculations.
Valentin Bartenev <vbart@nginx.com>
parents: 6974
diff changeset
199 width = width * 10 + (*fmt++ - '0');
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
200 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
201
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
202
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
203 for ( ;; ) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
204 switch (*fmt) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
205
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
206 case 'u':
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
207 sign = 0;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
208 fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
209 continue;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
210
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
211 case 'm':
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
212 max_width = 1;
467
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
213 fmt++;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
214 continue;
bbd6b0b4a2b1 nginx-0.1.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
215
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
216 case 'X':
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
217 hex = 2;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
218 sign = 0;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
219 fmt++;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
220 continue;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
221
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
222 case 'x':
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
223 hex = 1;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
224 sign = 0;
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
225 fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
226 continue;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
227
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
228 case '.':
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
229 fmt++;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
230
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
231 while (*fmt >= '0' && *fmt <= '9') {
7067
e3723f2a11b7 Parenthesized ASCII-related calculations.
Valentin Bartenev <vbart@nginx.com>
parents: 6974
diff changeset
232 frac_width = frac_width * 10 + (*fmt++ - '0');
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
233 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
234
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
235 break;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
236
1773
d85879105d35 %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1745
diff changeset
237 case '*':
1866
d5557e6a4224 use correct type cast
Igor Sysoev <igor@sysoev.ru>
parents: 1863
diff changeset
238 slen = va_arg(args, size_t);
1773
d85879105d35 %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1745
diff changeset
239 fmt++;
d85879105d35 %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1745
diff changeset
240 continue;
d85879105d35 %*s format
Igor Sysoev <igor@sysoev.ru>
parents: 1745
diff changeset
241
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
242 default:
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
243 break;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
244 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
245
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
246 break;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
247 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
248
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
249
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
250 switch (*fmt) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
251
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
252 case 'V':
1406
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
253 v = va_arg(args, ngx_str_t *);
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
254
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
255 buf = ngx_sprintf_str(buf, last, v->data, v->len, hex);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
256 fmt++;
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
257
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
258 continue;
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
259
1406
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
260 case 'v':
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
261 vv = va_arg(args, ngx_variable_value_t *);
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
262
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
263 buf = ngx_sprintf_str(buf, last, vv->data, vv->len, hex);
1406
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
264 fmt++;
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
265
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
266 continue;
03341711f9a2 use %v for ngx_variable_value_t in ngx_sprintf(),
Igor Sysoev <igor@sysoev.ru>
parents: 1405
diff changeset
267
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
268 case 's':
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
269 p = va_arg(args, u_char *);
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
270
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
271 buf = ngx_sprintf_str(buf, last, p, slen, hex);
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
272 fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
273
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
274 continue;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
275
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
276 case 'O':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
277 i64 = (int64_t) va_arg(args, off_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
278 sign = 1;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
279 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
280
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
281 case 'P':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
282 i64 = (int64_t) va_arg(args, ngx_pid_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
283 sign = 1;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
284 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
285
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
286 case 'T':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
287 i64 = (int64_t) va_arg(args, time_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
288 sign = 1;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
289 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
290
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
291 case 'M':
561
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
292 ms = (ngx_msec_t) va_arg(args, ngx_msec_t);
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
293 if ((ngx_msec_int_t) ms == -1) {
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
294 sign = 1;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
295 i64 = -1;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
296 } else {
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
297 sign = 0;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
298 ui64 = (uint64_t) ms;
e48ebafc6939 nginx-0.3.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 557
diff changeset
299 }
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
300 break;
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
301
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
302 case 'z':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
303 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
304 i64 = (int64_t) va_arg(args, ssize_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
305 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
306 ui64 = (uint64_t) va_arg(args, size_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
307 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
308 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
309
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
310 case 'i':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
311 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
312 i64 = (int64_t) va_arg(args, ngx_int_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
313 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
314 ui64 = (uint64_t) va_arg(args, ngx_uint_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
315 }
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
316
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
317 if (max_width) {
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
318 width = NGX_INT_T_LEN;
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
319 }
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
320
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
321 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
322
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
323 case 'd':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
324 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
325 i64 = (int64_t) va_arg(args, int);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
326 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
327 ui64 = (uint64_t) va_arg(args, u_int);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
328 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
329 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
330
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
331 case 'l':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
332 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
333 i64 = (int64_t) va_arg(args, long);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
334 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
335 ui64 = (uint64_t) va_arg(args, u_long);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
336 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
337 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
338
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
339 case 'D':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
340 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
341 i64 = (int64_t) va_arg(args, int32_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
342 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
343 ui64 = (uint64_t) va_arg(args, uint32_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
344 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
345 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
346
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
347 case 'L':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
348 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
349 i64 = va_arg(args, int64_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
350 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
351 ui64 = va_arg(args, uint64_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
352 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
353 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
354
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
355 case 'A':
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
356 if (sign) {
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
357 i64 = (int64_t) va_arg(args, ngx_atomic_int_t);
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
358 } else {
495
fc9909c369b2 nginx-0.1.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 493
diff changeset
359 ui64 = (uint64_t) va_arg(args, ngx_atomic_uint_t);
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
360 }
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
361
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
362 if (max_width) {
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
363 width = NGX_ATOMIC_T_LEN;
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
364 }
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
365
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
366 break;
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
367
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
368 case 'f':
3506
c3fa65192119 use double in %f format to allow %.15f precision
Igor Sysoev <igor@sysoev.ru>
parents: 3486
diff changeset
369 f = va_arg(args, double);
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
370
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
371 if (f < 0) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
372 *buf++ = '-';
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
373 f = -f;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
374 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
375
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
376 ui64 = (int64_t) f;
4604
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
377 frac = 0;
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
378
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
379 if (frac_width) {
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
380
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
381 scale = 1;
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
382 for (n = frac_width; n; n--) {
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
383 scale *= 10;
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
384 }
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
385
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
386 frac = (uint64_t) ((f - (double) ui64) * scale + 0.5);
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
387
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
388 if (frac == scale) {
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
389 ui64++;
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
390 frac = 0;
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
391 }
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
392 }
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
393
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
394 buf = ngx_sprintf_num(buf, last, ui64, zero, 0, width);
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
395
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
396 if (frac_width) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
397 if (buf < last) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
398 *buf++ = '.';
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
399 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
400
4604
d3fc672fd6cc Fix of "%f" format handling.
Igor Sysoev <igor@sysoev.ru>
parents: 4412
diff changeset
401 buf = ngx_sprintf_num(buf, last, frac, '0', 0, frac_width);
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
402 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
403
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
404 fmt++;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
405
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
406 continue;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
407
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
408 #if !(NGX_WIN32)
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
409 case 'r':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
410 i64 = (int64_t) va_arg(args, rlim_t);
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
411 sign = 1;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
412 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
413 #endif
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
414
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
415 case 'p':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
416 ui64 = (uintptr_t) va_arg(args, void *);
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
417 hex = 2;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
418 sign = 0;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
419 zero = '0';
6314
fcbac620ae83 Style: NGX_PTR_SIZE replaced with sizeof(void *).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6009
diff changeset
420 width = 2 * sizeof(void *);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
421 break;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
422
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
423 case 'c':
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
424 d = va_arg(args, int);
457
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
425 *buf++ = (u_char) (d & 0xff);
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
426 fmt++;
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
427
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
428 continue;
ded1284520cc nginx-0.1.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 455
diff changeset
429
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
430 case 'Z':
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
431 *buf++ = '\0';
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
432 fmt++;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
433
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
434 continue;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
435
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
436 case 'N':
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
437 #if (NGX_WIN32)
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
438 *buf++ = CR;
5965
78271500b8de A bounds check of %N format on Windows.
Igor Sysoev <igor@sysoev.ru>
parents: 5944
diff changeset
439 if (buf < last) {
78271500b8de A bounds check of %N format on Windows.
Igor Sysoev <igor@sysoev.ru>
parents: 5944
diff changeset
440 *buf++ = LF;
78271500b8de A bounds check of %N format on Windows.
Igor Sysoev <igor@sysoev.ru>
parents: 5944
diff changeset
441 }
78271500b8de A bounds check of %N format on Windows.
Igor Sysoev <igor@sysoev.ru>
parents: 5944
diff changeset
442 #else
78271500b8de A bounds check of %N format on Windows.
Igor Sysoev <igor@sysoev.ru>
parents: 5944
diff changeset
443 *buf++ = LF;
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
444 #endif
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
445 fmt++;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
446
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
447 continue;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
448
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
449 case '%':
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
450 *buf++ = '%';
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
451 fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
452
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
453 continue;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
454
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
455 default:
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
456 *buf++ = *fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
457
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
458 continue;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
459 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
460
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
461 if (sign) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
462 if (i64 < 0) {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
463 *buf++ = '-';
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
464 ui64 = (uint64_t) -i64;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
465
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
466 } else {
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
467 ui64 = (uint64_t) i64;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
468 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
469 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
470
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
471 buf = ngx_sprintf_num(buf, last, ui64, zero, hex, width);
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
472
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
473 fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
474
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
475 } else {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
476 *buf++ = *fmt++;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
477 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
478 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
479
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
480 return buf;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
481 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
482
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
483
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
484 static u_char *
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
485 ngx_sprintf_num(u_char *buf, u_char *last, uint64_t ui64, u_char zero,
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
486 ngx_uint_t hexadecimal, ngx_uint_t width)
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
487 {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
488 u_char *p, temp[NGX_INT64_LEN + 1];
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
489 /*
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
490 * we need temp[NGX_INT64_LEN] only,
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
491 * but icc issues the warning
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
492 */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
493 size_t len;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
494 uint32_t ui32;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
495 static u_char hex[] = "0123456789abcdef";
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
496 static u_char HEX[] = "0123456789ABCDEF";
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
497
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
498 p = temp + NGX_INT64_LEN;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
499
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
500 if (hexadecimal == 0) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
501
5358
670ceaba03d8 Win32: Open Watcom C compatibility fixes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4781
diff changeset
502 if (ui64 <= (uint64_t) NGX_MAX_UINT32_VALUE) {
2293
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
503
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
504 /*
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
505 * To divide 64-bit numbers and to find remainders
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
506 * on the x86 platform gcc and icc call the libc functions
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
507 * [u]divdi3() and [u]moddi3(), they call another function
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
508 * in its turn. On FreeBSD it is the qdivrem() function,
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
509 * its source code is about 170 lines of the code.
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
510 * The glibc counterpart is about 150 lines of the code.
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
511 *
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
512 * For 32-bit numbers and some divisors gcc and icc use
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
513 * a inlined multiplication and shifts. For example,
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
514 * unsigned "i32 / 10" is compiled to
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
515 *
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
516 * (i32 * 0xCCCCCCCD) >> 35
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
517 */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
518
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
519 ui32 = (uint32_t) ui64;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
520
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
521 do {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
522 *--p = (u_char) (ui32 % 10 + '0');
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
523 } while (ui32 /= 10);
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
524
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
525 } else {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
526 do {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
527 *--p = (u_char) (ui64 % 10 + '0');
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
528 } while (ui64 /= 10);
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
529 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
530
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
531 } else if (hexadecimal == 1) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
532
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
533 do {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
534
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
535 /* the "(uint32_t)" cast disables the BCC's warning */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
536 *--p = hex[(uint32_t) (ui64 & 0xf)];
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
537
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
538 } while (ui64 >>= 4);
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
539
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
540 } else { /* hexadecimal == 2 */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
541
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
542 do {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
543
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
544 /* the "(uint32_t)" cast disables the BCC's warning */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
545 *--p = HEX[(uint32_t) (ui64 & 0xf)];
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
546
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
547 } while (ui64 >>= 4);
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
548 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
549
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
550 /* zero or space padding */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
551
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
552 len = (temp + NGX_INT64_LEN) - p;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
553
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
554 while (len++ < width && buf < last) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
555 *buf++ = zero;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
556 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
557
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
558 /* number safe copy */
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
559
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
560 len = (temp + NGX_INT64_LEN) - p;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
561
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
562 if (buf + len > last) {
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
563 len = last - buf;
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
564 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
565
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
566 return ngx_cpymem(buf, p, len);
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
567 }
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
568
0433bc27e468 %f format
Igor Sysoev <igor@sysoev.ru>
parents: 2135
diff changeset
569
7736
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
570 static u_char *
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
571 ngx_sprintf_str(u_char *buf, u_char *last, u_char *src, size_t len,
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
572 ngx_uint_t hexadecimal)
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
573 {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
574 static u_char hex[] = "0123456789abcdef";
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
575 static u_char HEX[] = "0123456789ABCDEF";
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
576
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
577 if (hexadecimal == 0) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
578
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
579 if (len == (size_t) -1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
580 while (*src && buf < last) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
581 *buf++ = *src++;
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
582 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
583
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
584 } else {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
585 len = ngx_min((size_t) (last - buf), len);
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
586 buf = ngx_cpymem(buf, src, len);
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
587 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
588
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
589 } else if (hexadecimal == 1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
590
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
591 if (len == (size_t) -1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
592
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
593 while (*src && buf < last - 1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
594 *buf++ = hex[*src >> 4];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
595 *buf++ = hex[*src++ & 0xf];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
596 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
597
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
598 } else {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
599
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
600 while (len-- && buf < last - 1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
601 *buf++ = hex[*src >> 4];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
602 *buf++ = hex[*src++ & 0xf];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
603 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
604 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
605
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
606 } else { /* hexadecimal == 2 */
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
607
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
608 if (len == (size_t) -1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
609
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
610 while (*src && buf < last - 1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
611 *buf++ = HEX[*src >> 4];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
612 *buf++ = HEX[*src++ & 0xf];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
613 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
614
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
615 } else {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
616
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
617 while (len-- && buf < last - 1) {
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
618 *buf++ = HEX[*src >> 4];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
619 *buf++ = HEX[*src++ & 0xf];
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
620 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
621 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
622 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
623
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
624 return buf;
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
625 }
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
626
a46fcf101cfc Core: added format specifiers to output binary data as hex.
Vladimir Homutov <vl@nginx.com>
parents: 7494
diff changeset
627
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
628 /*
1541
22629796df09 fix comment
Igor Sysoev <igor@sysoev.ru>
parents: 1406
diff changeset
629 * We use ngx_strcasecmp()/ngx_strncasecmp() for 7-bit ASCII strings only,
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
630 * and implement our own ngx_strcasecmp()/ngx_strncasecmp()
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
631 * to avoid libc locale overhead. Besides, we use the ngx_uint_t's
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
632 * instead of the u_char's, because they are slightly faster.
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
633 */
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
634
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
635 ngx_int_t
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
636 ngx_strcasecmp(u_char *s1, u_char *s2)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
637 {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
638 ngx_uint_t c1, c2;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
639
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
640 for ( ;; ) {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
641 c1 = (ngx_uint_t) *s1++;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
642 c2 = (ngx_uint_t) *s2++;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
643
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
644 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
645 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
646
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
647 if (c1 == c2) {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
648
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
649 if (c1) {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
650 continue;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
651 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
652
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
653 return 0;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
654 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
655
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
656 return c1 - c2;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
657 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
658 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
659
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
660
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
661 ngx_int_t
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
662 ngx_strncasecmp(u_char *s1, u_char *s2, size_t n)
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
663 {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
664 ngx_uint_t c1, c2;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
665
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
666 while (n) {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
667 c1 = (ngx_uint_t) *s1++;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
668 c2 = (ngx_uint_t) *s2++;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
669
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
670 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
671 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
1107
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
672
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
673 if (c1 == c2) {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
674
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
675 if (c1) {
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
676 n--;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
677 continue;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
678 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
679
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
680 return 0;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
681 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
682
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
683 return c1 - c2;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
684 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
685
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
686 return 0;
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
687 }
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
688
db7c468c447d ngx_strcasecmp()/ngx_strncasecmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1029
diff changeset
689
1552
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
690 u_char *
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
691 ngx_strnstr(u_char *s1, char *s2, size_t len)
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
692 {
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
693 u_char c1, c2;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
694 size_t n;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
695
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
696 c2 = *(u_char *) s2++;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
697
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
698 n = ngx_strlen(s2);
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
699
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
700 do {
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
701 do {
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
702 if (len-- == 0) {
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
703 return NULL;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
704 }
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
705
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
706 c1 = *s1++;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
707
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
708 if (c1 == 0) {
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
709 return NULL;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
710 }
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
711
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
712 } while (c1 != c2);
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
713
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
714 if (n > len) {
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
715 return NULL;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
716 }
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
717
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
718 } while (ngx_strncmp(s1, (u_char *) s2, n) != 0);
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
719
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
720 return --s1;
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
721 }
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
722
f045c67ab622 ngx_strnstr()
Igor Sysoev <igor@sysoev.ru>
parents: 1550
diff changeset
723
1550
d0bdd5f2276e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1544
diff changeset
724 /*
d0bdd5f2276e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1544
diff changeset
725 * ngx_strstrn() and ngx_strcasestrn() are intended to search for static
d0bdd5f2276e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1544
diff changeset
726 * substring with known length in null-terminated string. The argument n
d0bdd5f2276e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1544
diff changeset
727 * must be length of the second substring - 1.
d0bdd5f2276e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1544
diff changeset
728 */
d0bdd5f2276e add comment
Igor Sysoev <igor@sysoev.ru>
parents: 1544
diff changeset
729
1542
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
730 u_char *
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
731 ngx_strstrn(u_char *s1, char *s2, size_t n)
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
732 {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
733 u_char c1, c2;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
734
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
735 c2 = *(u_char *) s2++;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
736
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
737 do {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
738 do {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
739 c1 = *s1++;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
740
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
741 if (c1 == 0) {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
742 return NULL;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
743 }
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
744
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
745 } while (c1 != c2);
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
746
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
747 } while (ngx_strncmp(s1, (u_char *) s2, n) != 0);
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
748
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
749 return --s1;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
750 }
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
751
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
752
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
753 u_char *
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
754 ngx_strcasestrn(u_char *s1, char *s2, size_t n)
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
755 {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
756 ngx_uint_t c1, c2;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
757
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
758 c2 = (ngx_uint_t) *s2++;
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
759 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
1542
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
760
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
761 do {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
762 do {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
763 c1 = (ngx_uint_t) *s1++;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
764
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
765 if (c1 == 0) {
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
766 return NULL;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
767 }
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
768
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
769 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
1542
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
770
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
771 } while (c1 != c2);
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
772
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
773 } while (ngx_strncasecmp(s1, (u_char *) s2, n) != 0);
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
774
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
775 return --s1;
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
776 }
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
777
f5bd1a7ed2cd ngx_strstrn() and ngx_strcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 1541
diff changeset
778
2668
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
779 /*
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
780 * ngx_strlcasestrn() is intended to search for static substring
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
781 * with known length in string until the argument last. The argument n
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
782 * must be length of the second substring - 1.
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
783 */
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
784
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
785 u_char *
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
786 ngx_strlcasestrn(u_char *s1, u_char *last, u_char *s2, size_t n)
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
787 {
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
788 ngx_uint_t c1, c2;
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
789
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
790 c2 = (ngx_uint_t) *s2++;
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
791 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
2668
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
792 last -= n;
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
793
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
794 do {
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
795 do {
2680
82e3946062be backout r2677 and fix ngx_strlcasestrn() again
Igor Sysoev <igor@sysoev.ru>
parents: 2676
diff changeset
796 if (s1 >= last) {
2668
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
797 return NULL;
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
798 }
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
799
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
800 c1 = (ngx_uint_t) *s1++;
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
801
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
802 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
2668
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
803
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
804 } while (c1 != c2);
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
805
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
806 } while (ngx_strncasecmp(s1, s2, n) != 0);
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
807
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
808 return --s1;
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
809 }
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
810
2f9c37445ffb ngx_strlcasestrn()
Igor Sysoev <igor@sysoev.ru>
parents: 2293
diff changeset
811
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
812 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
813 ngx_rstrncmp(u_char *s1, u_char *s2, size_t n)
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
814 {
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
815 if (n == 0) {
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
816 return 0;
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
817 }
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
818
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
819 n--;
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
820
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
821 for ( ;; ) {
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
822 if (s1[n] != s2[n]) {
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
823 return s1[n] - s2[n];
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
824 }
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
825
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
826 if (n == 0) {
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
827 return 0;
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
828 }
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
829
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
830 n--;
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
831 }
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
832 }
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
833
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
834
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
835 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
836 ngx_rstrncasecmp(u_char *s1, u_char *s2, size_t n)
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
837 {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
838 u_char c1, c2;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
839
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
840 if (n == 0) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
841 return 0;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
842 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
843
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
844 n--;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
845
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
846 for ( ;; ) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
847 c1 = s1[n];
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
848 if (c1 >= 'a' && c1 <= 'z') {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
849 c1 -= 'a' - 'A';
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
850 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
851
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
852 c2 = s2[n];
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
853 if (c2 >= 'a' && c2 <= 'z') {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
854 c2 -= 'a' - 'A';
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
855 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
856
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
857 if (c1 != c2) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
858 return c1 - c2;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
859 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
860
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
861 if (n == 0) {
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
862 return 0;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
863 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
864
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
865 n--;
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
866 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
867 }
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
868
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
869
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
870 ngx_int_t
1029
ce08bc4cb97b ngx_strn2cmp() > ngx_memn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1024
diff changeset
871 ngx_memn2cmp(u_char *s1, u_char *s2, size_t n1, size_t n2)
1024
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
872 {
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
873 size_t n;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
874 ngx_int_t m, z;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
875
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
876 if (n1 <= n2) {
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
877 n = n1;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
878 z = -1;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
879
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
880 } else {
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
881 n = n2;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
882 z = 1;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
883 }
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
884
1029
ce08bc4cb97b ngx_strn2cmp() > ngx_memn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 1024
diff changeset
885 m = ngx_memcmp(s1, s2, n);
1024
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
886
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
887 if (m || n1 == n2) {
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
888 return m;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
889 }
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
890
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
891 return z;
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
892 }
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
893
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
894
eeadc558e86d ngx_strn2cmp()
Igor Sysoev <igor@sysoev.ru>
parents: 827
diff changeset
895 ngx_int_t
3116
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
896 ngx_dns_strcmp(u_char *s1, u_char *s2)
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
897 {
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
898 ngx_uint_t c1, c2;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
899
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
900 for ( ;; ) {
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
901 c1 = (ngx_uint_t) *s1++;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
902 c2 = (ngx_uint_t) *s2++;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
903
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
904 c1 = (c1 >= 'A' && c1 <= 'Z') ? (c1 | 0x20) : c1;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
905 c2 = (c2 >= 'A' && c2 <= 'Z') ? (c2 | 0x20) : c2;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
906
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
907 if (c1 == c2) {
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
908
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
909 if (c1) {
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
910 continue;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
911 }
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
912
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
913 return 0;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
914 }
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
915
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
916 /* in ASCII '.' > '-', but we need '.' to be the lowest character */
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
917
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
918 c1 = (c1 == '.') ? ' ' : c1;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
919 c2 = (c2 == '.') ? ' ' : c2;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
920
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
921 return c1 - c2;
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
922 }
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
923 }
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
924
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
925
98e288c6dac3 If .domain.com, .sub.domain.com, and .domain-some.com were defined,
Igor Sysoev <igor@sysoev.ru>
parents: 3115
diff changeset
926 ngx_int_t
5389
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
927 ngx_filename_cmp(u_char *s1, u_char *s2, size_t n)
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
928 {
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
929 ngx_uint_t c1, c2;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
930
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
931 while (n) {
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
932 c1 = (ngx_uint_t) *s1++;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
933 c2 = (ngx_uint_t) *s2++;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
934
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
935 #if (NGX_HAVE_CASELESS_FILESYSTEM)
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
936 c1 = tolower(c1);
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
937 c2 = tolower(c2);
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
938 #endif
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
939
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
940 if (c1 == c2) {
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
941
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
942 if (c1) {
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
943 n--;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
944 continue;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
945 }
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
946
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
947 return 0;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
948 }
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
949
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
950 /* we need '/' to be the lowest character */
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
951
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
952 if (c1 == 0 || c2 == 0) {
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
953 return c1 - c2;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
954 }
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
955
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
956 c1 = (c1 == '/') ? 0 : c1;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
957 c2 = (c2 == '/') ? 0 : c2;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
958
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
959 return c1 - c2;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
960 }
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
961
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
962 return 0;
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
963 }
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
964
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
965
72e31d88defa Added ngx_filename_cmp() with "/" sorted to the left.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5358
diff changeset
966 ngx_int_t
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
967 ngx_atoi(u_char *line, size_t n)
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
968 {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
969 ngx_int_t value, cutoff, cutlim;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
970
84
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
971 if (n == 0) {
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
972 return NGX_ERROR;
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
973 }
fab4cb00fe5b nginx-0.0.1-2003-05-06-21:03:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 83
diff changeset
974
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
975 cutoff = NGX_MAX_INT_T_VALUE / 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
976 cutlim = NGX_MAX_INT_T_VALUE % 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
977
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
978 for (value = 0; n--; line++) {
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
979 if (*line < '0' || *line > '9') {
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
980 return NGX_ERROR;
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
981 }
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
982
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
983 if (value >= cutoff && (value > cutoff || *line - '0' > cutlim)) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
984 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
985 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
986
83
a7e45c45a95c nginx-0.0.1-2003-04-28-19:06:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 69
diff changeset
987 value = value * 10 + (*line - '0');
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
988 }
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
989
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
990 return value;
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
991 }
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
992
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
993
3512
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
994 /* parse a fixed point number, e.g., ngx_atofp("10.5", 4, 2) returns 1050 */
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
995
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
996 ngx_int_t
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
997 ngx_atofp(u_char *line, size_t n, size_t point)
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
998 {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
999 ngx_int_t value, cutoff, cutlim;
3512
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1000 ngx_uint_t dot;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1001
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1002 if (n == 0) {
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1003 return NGX_ERROR;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1004 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1005
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1006 cutoff = NGX_MAX_INT_T_VALUE / 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1007 cutlim = NGX_MAX_INT_T_VALUE % 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1008
3512
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1009 dot = 0;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1010
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1011 for (value = 0; n--; line++) {
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1012
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1013 if (point == 0) {
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1014 return NGX_ERROR;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1015 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1016
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1017 if (*line == '.') {
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1018 if (dot) {
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1019 return NGX_ERROR;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1020 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1021
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1022 dot = 1;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1023 continue;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1024 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1025
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1026 if (*line < '0' || *line > '9') {
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1027 return NGX_ERROR;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1028 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1029
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1030 if (value >= cutoff && (value > cutoff || *line - '0' > cutlim)) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1031 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1032 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1033
3512
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1034 value = value * 10 + (*line - '0');
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1035 point -= dot;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1036 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1037
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1038 while (point--) {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1039 if (value > cutoff) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1040 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1041 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1042
3512
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1043 value = value * 10;
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1044 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1045
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1046 return value;
3512
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1047 }
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1048
098100f5f54b ngx_atofp()
Igor Sysoev <igor@sysoev.ru>
parents: 3507
diff changeset
1049
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1050 ssize_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1051 ngx_atosz(u_char *line, size_t n)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1052 {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1053 ssize_t value, cutoff, cutlim;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1054
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1055 if (n == 0) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1056 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1057 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1058
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1059 cutoff = NGX_MAX_SIZE_T_VALUE / 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1060 cutlim = NGX_MAX_SIZE_T_VALUE % 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1061
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1062 for (value = 0; n--; line++) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1063 if (*line < '0' || *line > '9') {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1064 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1065 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1066
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1067 if (value >= cutoff && (value > cutoff || *line - '0' > cutlim)) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1068 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1069 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1070
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1071 value = value * 10 + (*line - '0');
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1072 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1073
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1074 return value;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1075 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1076
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1077
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1078 off_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1079 ngx_atoof(u_char *line, size_t n)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1080 {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1081 off_t value, cutoff, cutlim;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1082
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1083 if (n == 0) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1084 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1085 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1086
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1087 cutoff = NGX_MAX_OFF_T_VALUE / 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1088 cutlim = NGX_MAX_OFF_T_VALUE % 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1089
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1090 for (value = 0; n--; line++) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1091 if (*line < '0' || *line > '9') {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1092 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1093 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1094
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1095 if (value >= cutoff && (value > cutoff || *line - '0' > cutlim)) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1096 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1097 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1098
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1099 value = value * 10 + (*line - '0');
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1100 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1101
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1102 return value;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1103 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1104
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1105
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1106 time_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1107 ngx_atotm(u_char *line, size_t n)
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1108 {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1109 time_t value, cutoff, cutlim;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1110
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1111 if (n == 0) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1112 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1113 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1114
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1115 cutoff = NGX_MAX_TIME_T_VALUE / 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1116 cutlim = NGX_MAX_TIME_T_VALUE % 10;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1117
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1118 for (value = 0; n--; line++) {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1119 if (*line < '0' || *line > '9') {
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1120 return NGX_ERROR;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1121 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1122
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1123 if (value >= cutoff && (value > cutoff || *line - '0' > cutlim)) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1124 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1125 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1126
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1127 value = value * 10 + (*line - '0');
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1128 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1129
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1130 return value;
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1131 }
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1132
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
1133
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1134 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1135 ngx_hextoi(u_char *line, size_t n)
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1136 {
783
47e2296f9897 decrease number of branches
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1137 u_char c, ch;
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1138 ngx_int_t value, cutoff;
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1139
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1140 if (n == 0) {
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1141 return NGX_ERROR;
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1142 }
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1143
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1144 cutoff = NGX_MAX_INT_T_VALUE / 16;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1145
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1146 for (value = 0; n--; line++) {
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1147 if (value > cutoff) {
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1148 return NGX_ERROR;
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1149 }
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1150
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1151 ch = *line;
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1152
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1153 if (ch >= '0' && ch <= '9') {
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1154 value = value * 16 + (ch - '0');
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1155 continue;
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1156 }
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1157
783
47e2296f9897 decrease number of branches
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1158 c = (u_char) (ch | 0x20);
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1159
783
47e2296f9897 decrease number of branches
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1160 if (c >= 'a' && c <= 'f') {
47e2296f9897 decrease number of branches
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
1161 value = value * 16 + (c - 'a' + 10);
338
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1162 continue;
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1163 }
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1164
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1165 return NGX_ERROR;
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1166 }
0376cffa29e6 nginx-0.0.3-2004-05-20-21:33:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 290
diff changeset
1167
6009
15a15f6ae3a2 Core: overflow detection in number parsing functions.
Ruslan Ermilov <ru@nginx.com>
parents: 5965
diff changeset
1168 return value;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1169 }
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1170
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1171
1745
ec63069aeb78 replace ngx_md5_text() with ngx_hex_dump()
Igor Sysoev <igor@sysoev.ru>
parents: 1629
diff changeset
1172 u_char *
ec63069aeb78 replace ngx_md5_text() with ngx_hex_dump()
Igor Sysoev <igor@sysoev.ru>
parents: 1629
diff changeset
1173 ngx_hex_dump(u_char *dst, u_char *src, size_t len)
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
1174 {
290
87e73f067470 nginx-0.0.2-2004-03-16-10:10:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
1175 static u_char hex[] = "0123456789abcdef";
175
e92c2c647c57 nginx-0.0.1-2003-11-05-20:03:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 174
diff changeset
1176
1745
ec63069aeb78 replace ngx_md5_text() with ngx_hex_dump()
Igor Sysoev <igor@sysoev.ru>
parents: 1629
diff changeset
1177 while (len--) {
ec63069aeb78 replace ngx_md5_text() with ngx_hex_dump()
Igor Sysoev <igor@sysoev.ru>
parents: 1629
diff changeset
1178 *dst++ = hex[*src >> 4];
ec63069aeb78 replace ngx_md5_text() with ngx_hex_dump()
Igor Sysoev <igor@sysoev.ru>
parents: 1629
diff changeset
1179 *dst++ = hex[*src++ & 0xf];
176
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1180 }
c0552e5ab567 nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents: 175
diff changeset
1181
1745
ec63069aeb78 replace ngx_md5_text() with ngx_hex_dump()
Igor Sysoev <igor@sysoev.ru>
parents: 1629
diff changeset
1182 return dst;
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
1183 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
1184
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
1185
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1186 void
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1187 ngx_encode_base64(ngx_str_t *dst, ngx_str_t *src)
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1188 {
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1189 static u_char basis64[] =
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1190 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1191
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1192 ngx_encode_base64_internal(dst, src, basis64, 1);
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1193 }
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1194
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1195
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1196 void
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1197 ngx_encode_base64url(ngx_str_t *dst, ngx_str_t *src)
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1198 {
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1199 static u_char basis64[] =
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1200 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1201
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1202 ngx_encode_base64_internal(dst, src, basis64, 0);
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1203 }
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1204
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1205
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1206 static void
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1207 ngx_encode_base64_internal(ngx_str_t *dst, ngx_str_t *src, const u_char *basis,
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1208 ngx_uint_t padding)
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1209 {
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1210 u_char *d, *s;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1211 size_t len;
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1212
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
1213 len = src->len;
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1214 s = src->data;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
1215 d = dst->data;
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1216
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1217 while (len > 2) {
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1218 *d++ = basis[(s[0] >> 2) & 0x3f];
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1219 *d++ = basis[((s[0] & 3) << 4) | (s[1] >> 4)];
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1220 *d++ = basis[((s[1] & 0x0f) << 2) | (s[2] >> 6)];
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1221 *d++ = basis[s[2] & 0x3f];
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1222
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1223 s += 3;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1224 len -= 3;
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1225 }
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1226
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1227 if (len) {
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1228 *d++ = basis[(s[0] >> 2) & 0x3f];
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1229
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1230 if (len == 1) {
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1231 *d++ = basis[(s[0] & 3) << 4];
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1232 if (padding) {
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1233 *d++ = '=';
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1234 }
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1235
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1236 } else {
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1237 *d++ = basis[((s[0] & 3) << 4) | (s[1] >> 4)];
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1238 *d++ = basis[(s[1] & 0x0f) << 2];
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1239 }
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1240
5551
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1241 if (padding) {
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1242 *d++ = '=';
a602e1006579 Core: added ngx_encode_base64url().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5389
diff changeset
1243 }
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1244 }
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1245
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1246 dst->len = d - dst->data;
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1247 }
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1248
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1249
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1250 ngx_int_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1251 ngx_decode_base64(ngx_str_t *dst, ngx_str_t *src)
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1252 {
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1253 static u_char basis64[] = {
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1254 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1255 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1256 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 62, 77, 77, 77, 63,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1257 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1258 77, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1259 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1260 77, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1261 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 77, 77, 77, 77, 77,
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1262
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1263 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1264 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1265 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1266 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1267 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1268 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1269 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1270 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1271 };
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1272
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1273 return ngx_decode_base64_internal(dst, src, basis64);
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1274 }
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1275
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1276
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1277 ngx_int_t
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1278 ngx_decode_base64url(ngx_str_t *dst, ngx_str_t *src)
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1279 {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1280 static u_char basis64[] = {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1281 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1282 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1283 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 62, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1284 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1285 77, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1286 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 77, 77, 77, 77, 63,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1287 77, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1288 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1289
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1290 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1291 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1292 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1293 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1294 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1295 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1296 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1297 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1298 };
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1299
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1300 return ngx_decode_base64_internal(dst, src, basis64);
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1301 }
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1302
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1303
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1304 static ngx_int_t
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1305 ngx_decode_base64_internal(ngx_str_t *dst, ngx_str_t *src, const u_char *basis)
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1306 {
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1307 size_t len;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1308 u_char *d, *s;
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1309
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1310 for (len = 0; len < src->len; len++) {
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1311 if (src->data[len] == '=') {
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1312 break;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1313 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1314
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1315 if (basis[src->data[len]] == 77) {
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1316 return NGX_ERROR;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1317 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1318 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1319
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1320 if (len % 4 == 1) {
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1321 return NGX_ERROR;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1322 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1323
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1324 s = src->data;
409
8ac40cae79f0 nginx-0.0.10-2004-08-29-07:55:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
1325 d = dst->data;
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1326
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1327 while (len > 3) {
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1328 *d++ = (u_char) (basis[s[0]] << 2 | basis[s[1]] >> 4);
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1329 *d++ = (u_char) (basis[s[1]] << 4 | basis[s[2]] >> 2);
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1330 *d++ = (u_char) (basis[s[2]] << 6 | basis[s[3]]);
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1331
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1332 s += 4;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1333 len -= 4;
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1334 }
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1335
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1336 if (len > 1) {
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1337 *d++ = (u_char) (basis[s[0]] << 2 | basis[s[1]] >> 4);
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1338 }
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1339
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1340 if (len > 2) {
3756
7224d008faaf new ngx_http_secure_link_module with secure_link, secure_link_md5, and
Igor Sysoev <igor@sysoev.ru>
parents: 3725
diff changeset
1341 *d++ = (u_char) (basis[s[1]] << 4 | basis[s[2]] >> 2);
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1342 }
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1343
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 404
diff changeset
1344 dst->len = d - dst->data;
404
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1345
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1346 return NGX_OK;
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1347 }
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1348
37b5381fb6d8 nginx-0.0.9-2004-07-30-21:05:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 339
diff changeset
1349
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1350 /*
2125
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1351 * ngx_utf8_decode() decodes two and more bytes UTF sequences only
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1352 * the return values:
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1353 * 0x80 - 0x10ffff valid character
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1354 * 0x110000 - 0xfffffffd invalid sequence
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1355 * 0xfffffffe incomplete sequence
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1356 * 0xffffffff error
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1357 */
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1358
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1359 uint32_t
2125
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1360 ngx_utf8_decode(u_char **p, size_t n)
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1361 {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1362 size_t len;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1363 uint32_t u, i, valid;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1364
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1365 u = **p;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1366
4209
9679fc14c063 Fixed utf8 decode (ticket #25).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4192
diff changeset
1367 if (u >= 0xf0) {
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1368
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1369 u &= 0x07;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1370 valid = 0xffff;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1371 len = 3;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1372
4209
9679fc14c063 Fixed utf8 decode (ticket #25).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4192
diff changeset
1373 } else if (u >= 0xe0) {
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1374
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1375 u &= 0x0f;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1376 valid = 0x7ff;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1377 len = 2;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1378
4209
9679fc14c063 Fixed utf8 decode (ticket #25).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4192
diff changeset
1379 } else if (u >= 0xc2) {
657
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1380
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1381 u &= 0x1f;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1382 valid = 0x7f;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1383 len = 1;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1384
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1385 } else {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1386 (*p)++;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1387 return 0xffffffff;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1388 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1389
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1390 if (n - 1 < len) {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1391 return 0xfffffffe;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1392 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1393
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1394 (*p)++;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1395
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1396 while (len) {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1397 i = *(*p)++;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1398
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1399 if (i < 0x80) {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1400 return 0xffffffff;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1401 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1402
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1403 u = (u << 6) | (i & 0x3f);
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1404
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1405 len--;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1406 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1407
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1408 if (u > valid) {
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1409 return u;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1410 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1411
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1412 return 0xffffffff;
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1413 }
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1414
400711951595 nginx-0.3.50-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 613
diff changeset
1415
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1416 size_t
2125
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1417 ngx_utf8_length(u_char *p, size_t n)
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1418 {
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1419 u_char c, *last;
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1420 size_t len;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1421
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1422 last = p + n;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1423
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1424 for (len = 0; p < last; len++) {
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1425
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1426 c = *p;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1427
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1428 if (c < 0x80) {
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1429 p++;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1430 continue;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1431 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1432
7494
a42a6dfeb01a Fixed incorrect length handling in ngx_utf8_length().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7395
diff changeset
1433 if (ngx_utf8_decode(&p, last - p) > 0x10ffff) {
2125
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1434 /* invalid UTF-8 */
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1435 return n;
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1436 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1437 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1438
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1439 return len;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1440 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1441
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1442
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1443 u_char *
2125
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1444 ngx_utf8_cpystrn(u_char *dst, u_char *src, size_t n, size_t len)
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1445 {
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1446 u_char c, *next;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1447
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1448 if (n == 0) {
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1449 return dst;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1450 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1451
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1452 while (--n) {
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1453
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1454 c = *src;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1455 *dst = c;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1456
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1457 if (c < 0x80) {
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1458
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1459 if (c != '\0') {
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1460 dst++;
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1461 src++;
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1462 len--;
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1463
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1464 continue;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1465 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1466
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1467 return dst;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1468 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1469
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1470 next = src;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1471
2125
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1472 if (ngx_utf8_decode(&next, len) > 0x10ffff) {
8e4b9d2acde8 rename ngx_utf_...() to ngx_utf8_...()
Igor Sysoev <igor@sysoev.ru>
parents: 2120
diff changeset
1473 /* invalid UTF-8 */
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1474 break;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1475 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1476
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1477 while (src < next) {
3410
bfcc9be4f1c9 fix ngx_utf8_cpystrn(): it did not fully copy utf-8 string
Igor Sysoev <igor@sysoev.ru>
parents: 3275
diff changeset
1478 *dst++ = *src++;
2120
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1479 len--;
2f2052fdd882 fix utf-8 names in autoindex
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
1480 }
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1481 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1482
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1483 *dst = '\0';
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1484
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1485 return dst;
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1486 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1487
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
1488
493
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1489 uintptr_t
975f62e77f02 nginx-0.1.21-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 485
diff changeset
1490 ngx_escape_uri(u_char *dst, u_char *src, size_t size, ngx_uint_t type)
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1491 {
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1492 ngx_uint_t n;
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1493 uint32_t *escape;
5772
d421be0d842a Core: use uppercase hexadecimal digits for percent-encoding.
Piotr Sikora <piotr@cloudflare.com>
parents: 5551
diff changeset
1494 static u_char hex[] = "0123456789ABCDEF";
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1495
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1496 /*
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1497 * Per RFC 3986 only the following chars are allowed in URIs unescaped:
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1498 *
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1499 * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1500 * gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@"
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1501 * sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1502 * / "*" / "+" / "," / ";" / "="
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1503 *
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1504 * And "%" can appear as a part of escaping itself. The following
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1505 * characters are not allowed and need to be escaped: %00-%1F, %7F-%FF,
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1506 * " ", """, "<", ">", "\", "^", "`", "{", "|", "}".
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1507 */
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1508
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1509 /* " ", "#", "%", "?", not allowed */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1510
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1511 static uint32_t uri[] = {
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1512 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1513
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1514 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1515 0xd000002d, /* 1101 0000 0000 0000 0000 0000 0010 1101 */
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1516
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1517 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1518 0x50000000, /* 0101 0000 0000 0000 0000 0000 0000 0000 */
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1519
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1520 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1521 0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1522
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1523 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1524 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1525 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1526 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1527 };
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1528
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1529 /* " ", "#", "%", "&", "+", ";", "?", not allowed */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1530
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1531 static uint32_t args[] = {
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1532 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1533
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1534 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1535 0xd800086d, /* 1101 1000 0000 0000 0000 1000 0110 1101 */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1536
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1537 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1538 0x50000000, /* 0101 0000 0000 0000 0000 0000 0000 0000 */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1539
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1540 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1541 0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1542
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1543 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1544 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1545 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1546 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1547 };
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1548
4192
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1549 /* not ALPHA, DIGIT, "-", ".", "_", "~" */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1550
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1551 static uint32_t uri_component[] = {
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1552 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1553
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1554 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1555 0xfc009fff, /* 1111 1100 0000 0000 1001 1111 1111 1111 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1556
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1557 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1558 0x78000001, /* 0111 1000 0000 0000 0000 0000 0000 0001 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1559
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1560 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1561 0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1562
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1563 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1564 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1565 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1566 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1567 };
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1568
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1569 /* " ", "#", """, "%", "'", not allowed */
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1570
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1571 static uint32_t html[] = {
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1572 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1573
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1574 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1575 0x500000ad, /* 0101 0000 0000 0000 0000 0000 1010 1101 */
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1576
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1577 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1578 0x50000000, /* 0101 0000 0000 0000 0000 0000 0000 0000 */
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1579
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1580 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1581 0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1582
827
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1583 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1584 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1585 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1586 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
0444286b860a style fix
Igor Sysoev <igor@sysoev.ru>
parents: 826
diff changeset
1587 };
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1588
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1589 /* " ", """, "'", not allowed */
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1590
1298
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1591 static uint32_t refresh[] = {
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1592 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1593
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1594 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1595 0x50000085, /* 0101 0000 0000 0000 0000 0000 1000 0101 */
1298
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1596
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1597 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1598 0x50000000, /* 0101 0000 0000 0000 0000 0000 0000 0000 */
1298
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1599
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1600 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
7880
dfd8dfb436e5 Core: escaping of chars not allowed in URIs per RFC 3986.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7879
diff changeset
1601 0xd8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
1298
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1602
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1603 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1604 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1605 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1606 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1607 };
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1608
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1333
diff changeset
1609 /* " ", "%", %00-%1F */
1333
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1610
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1611 static uint32_t memcached[] = {
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1612 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1613
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1614 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1333
diff changeset
1615 0x00000021, /* 0000 0000 0000 0000 0000 0000 0010 0001 */
1333
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1616
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1617 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1618 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1619
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1620 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1621 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1622
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1623 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1624 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1625 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1626 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1627 };
07ebeeb55700 escape space, etc in $memcached_key
Igor Sysoev <igor@sysoev.ru>
parents: 1310
diff changeset
1628
1405
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1333
diff changeset
1629 /* mail_auth is the same as memcached */
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1333
diff changeset
1630
fdd064faf26a escape " ", "%", and %00-%1F in login and password
Igor Sysoev <igor@sysoev.ru>
parents: 1333
diff changeset
1631 static uint32_t *map[] =
4192
61e4af19df9f Autoindex: escape '?' in file names.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4133
diff changeset
1632 { uri, args, uri_component, html, refresh, memcached, memcached };
1298
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1633
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1634
458e041fc902 msie_refresh should escape at least '"' to prevent XSS
Igor Sysoev <igor@sysoev.ru>
parents: 1297
diff changeset
1635 escape = map[type];
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1636
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1637 if (dst == NULL) {
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1638
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1639 /* find the number of the characters to be escaped */
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1640
3115
204ea173234f style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3046
diff changeset
1641 n = 0;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1642
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1643 while (size) {
6626
b3682580c1bd Avoid left-shifting integers into the sign bit, which is undefined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6314
diff changeset
1644 if (escape[*src >> 5] & (1U << (*src & 0x1f))) {
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1645 n++;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1646 }
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1647 src++;
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1648 size--;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1649 }
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1650
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1651 return (uintptr_t) n;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1652 }
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1653
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1654 while (size) {
6626
b3682580c1bd Avoid left-shifting integers into the sign bit, which is undefined.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6314
diff changeset
1655 if (escape[*src >> 5] & (1U << (*src & 0x1f))) {
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1656 *dst++ = '%';
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1657 *dst++ = hex[*src >> 4];
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1658 *dst++ = hex[*src & 0xf];
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1659 src++;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1660
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1661 } else {
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1662 *dst++ = *src++;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 444
diff changeset
1663 }
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1664 size--;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1665 }
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1666
485
4ebe09b07e30 nginx-0.1.17-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1667 return (uintptr_t) dst;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 0
diff changeset
1668 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1669
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1670
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1671 void
601
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1672 ngx_unescape_uri(u_char **dst, u_char **src, size_t size, ngx_uint_t type)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1673 {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1674 u_char *d, *s, ch, c, decoded;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1675 enum {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1676 sw_usual = 0,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1677 sw_quoted,
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1678 sw_quoted_second
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1679 } state;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1680
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1681 d = *dst;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1682 s = *src;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1683
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1684 state = 0;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1685 decoded = 0;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1686
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1687 while (size--) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1688
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1689 ch = *s++;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1690
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1691 switch (state) {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1692 case sw_usual:
1593
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1693 if (ch == '?'
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1694 && (type & (NGX_UNESCAPE_URI|NGX_UNESCAPE_REDIRECT)))
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1695 {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1696 *d++ = ch;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1697 goto done;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1698 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1699
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1700 if (ch == '%') {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1701 state = sw_quoted;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1702 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1703 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1704
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1705 *d++ = ch;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1706 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1707
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1708 case sw_quoted:
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1709
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1710 if (ch >= '0' && ch <= '9') {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1711 decoded = (u_char) (ch - '0');
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1712 state = sw_quoted_second;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1713 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1714 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1715
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1716 c = (u_char) (ch | 0x20);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1717 if (c >= 'a' && c <= 'f') {
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1718 decoded = (u_char) (c - 'a' + 10);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1719 state = sw_quoted_second;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1720 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1721 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1722
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1723 /* the invalid quoted character */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1724
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1725 state = sw_usual;
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1726
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1727 *d++ = ch;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1728
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1729 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1730
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1731 case sw_quoted_second:
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1732
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1733 state = sw_usual;
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1734
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1735 if (ch >= '0' && ch <= '9') {
7067
e3723f2a11b7 Parenthesized ASCII-related calculations.
Valentin Bartenev <vbart@nginx.com>
parents: 6974
diff changeset
1736 ch = (u_char) ((decoded << 4) + (ch - '0'));
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1737
1593
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1738 if (type & NGX_UNESCAPE_REDIRECT) {
601
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1739 if (ch > '%' && ch < 0x7f) {
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1740 *d++ = ch;
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1741 break;
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1742 }
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1743
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1744 *d++ = '%'; *d++ = *(s - 2); *d++ = *(s - 1);
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1745
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1746 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1747 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1748
601
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1749 *d++ = ch;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1750
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1751 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1752 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1753
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1754 c = (u_char) (ch | 0x20);
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1755 if (c >= 'a' && c <= 'f') {
7067
e3723f2a11b7 Parenthesized ASCII-related calculations.
Valentin Bartenev <vbart@nginx.com>
parents: 6974
diff changeset
1756 ch = (u_char) ((decoded << 4) + (c - 'a') + 10);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1757
1593
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1758 if (type & NGX_UNESCAPE_URI) {
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1759 if (ch == '?') {
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1760 *d++ = ch;
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1761 goto done;
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1762 }
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1763
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1764 *d++ = ch;
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1765 break;
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1766 }
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1767
bef67c6abbe7 unescape SSI include
Igor Sysoev <igor@sysoev.ru>
parents: 1560
diff changeset
1768 if (type & NGX_UNESCAPE_REDIRECT) {
601
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1769 if (ch == '?') {
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1770 *d++ = ch;
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1771 goto done;
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1772 }
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1773
601
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1774 if (ch > '%' && ch < 0x7f) {
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1775 *d++ = ch;
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1776 break;
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1777 }
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1778
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1779 *d++ = '%'; *d++ = *(s - 2); *d++ = *(s - 1);
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1780 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1781 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1782
601
77f77f53214a nginx-0.3.22-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
1783 *d++ = ch;
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1784
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1785 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1786 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1787
589
d4e858a5751a nginx-0.3.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
1788 /* the invalid quoted character */
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1789
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1790 break;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1791 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1792 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1793
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1794 done:
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1795
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1796 *dst = d;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1797 *src = s;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
1798 }
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1799
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1800
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1801 uintptr_t
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1802 ngx_escape_html(u_char *dst, u_char *src, size_t size)
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1803 {
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1804 u_char ch;
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1805 ngx_uint_t len;
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1806
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1807 if (dst == NULL) {
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1808
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1809 len = 0;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1810
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1811 while (size) {
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1812 switch (*src++) {
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1813
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1814 case '<':
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1815 len += sizeof("&lt;") - 2;
1560
25ee6eee7573 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1552
diff changeset
1816 break;
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1817
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1818 case '>':
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1819 len += sizeof("&gt;") - 2;
1560
25ee6eee7573 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1552
diff changeset
1820 break;
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1821
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1822 case '&':
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1823 len += sizeof("&amp;") - 2;
1560
25ee6eee7573 style fix: remove trailing spaces
Igor Sysoev <igor@sysoev.ru>
parents: 1552
diff changeset
1824 break;
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1825
4312
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1826 case '"':
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1827 len += sizeof("&quot;") - 2;
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1828 break;
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1829
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1830 default:
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1831 break;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1832 }
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1833 size--;
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1834 }
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1835
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1836 return (uintptr_t) len;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1837 }
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1838
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1839 while (size) {
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1840 ch = *src++;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1841
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1842 switch (ch) {
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1843
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1844 case '<':
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1845 *dst++ = '&'; *dst++ = 'l'; *dst++ = 't'; *dst++ = ';';
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1846 break;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1847
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1848 case '>':
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1849 *dst++ = '&'; *dst++ = 'g'; *dst++ = 't'; *dst++ = ';';
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1850 break;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1851
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1852 case '&':
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1853 *dst++ = '&'; *dst++ = 'a'; *dst++ = 'm'; *dst++ = 'p';
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1854 *dst++ = ';';
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1855 break;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1856
4312
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1857 case '"':
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1858 *dst++ = '&'; *dst++ = 'q'; *dst++ = 'u'; *dst++ = 'o';
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1859 *dst++ = 't'; *dst++ = ';';
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1860 break;
0a8e51a16484 Added escaping of double quotes in ngx_escape_html().
Maxim Dounin <mdounin@mdounin.ru>
parents: 4209
diff changeset
1861
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1862 default:
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1863 *dst++ = ch;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1864 break;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1865 }
3275
b344b68da8c5 optimize some cycles:
Igor Sysoev <igor@sysoev.ru>
parents: 3116
diff changeset
1866 size--;
1544
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1867 }
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1868
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1869 return (uintptr_t) dst;
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1870 }
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1871
998c44b19e30 ngx_escape_html()
Igor Sysoev <igor@sysoev.ru>
parents: 1542
diff changeset
1872
5944
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1873 uintptr_t
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1874 ngx_escape_json(u_char *dst, u_char *src, size_t size)
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1875 {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1876 u_char ch;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1877 ngx_uint_t len;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1878
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1879 if (dst == NULL) {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1880 len = 0;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1881
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1882 while (size) {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1883 ch = *src++;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1884
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1885 if (ch == '\\' || ch == '"') {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1886 len++;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1887
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1888 } else if (ch <= 0x1f) {
6974
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1889
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1890 switch (ch) {
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1891 case '\n':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1892 case '\r':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1893 case '\t':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1894 case '\b':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1895 case '\f':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1896 len++;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1897 break;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1898
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1899 default:
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1900 len += sizeof("\\u001F") - 2;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1901 }
5944
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1902 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1903
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1904 size--;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1905 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1906
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1907 return (uintptr_t) len;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1908 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1909
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1910 while (size) {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1911 ch = *src++;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1912
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1913 if (ch > 0x1f) {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1914
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1915 if (ch == '\\' || ch == '"') {
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1916 *dst++ = '\\';
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1917 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1918
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1919 *dst++ = ch;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1920
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1921 } else {
6974
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1922 *dst++ = '\\';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1923
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1924 switch (ch) {
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1925 case '\n':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1926 *dst++ = 'n';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1927 break;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1928
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1929 case '\r':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1930 *dst++ = 'r';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1931 break;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1932
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1933 case '\t':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1934 *dst++ = 't';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1935 break;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1936
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1937 case '\b':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1938 *dst++ = 'b';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1939 break;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1940
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1941 case '\f':
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1942 *dst++ = 'f';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1943 break;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1944
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1945 default:
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1946 *dst++ = 'u'; *dst++ = '0'; *dst++ = '0';
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1947 *dst++ = '0' + (ch >> 4);
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1948
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1949 ch &= 0xf;
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1950
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1951 *dst++ = (ch < 10) ? ('0' + ch) : ('A' + ch - 10);
289403abc84e Core: improved JSON escaping.
Valentin Bartenev <vbart@nginx.com>
parents: 6626
diff changeset
1952 }
5944
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1953 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1954
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1955 size--;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1956 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1957
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1958 return (uintptr_t) dst;
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1959 }
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1960
33c08d7e2915 Autoindex: implemented JSON output format.
Valentin Bartenev <vbart@nginx.com>
parents: 5772
diff changeset
1961
3641
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1962 void
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1963 ngx_str_rbtree_insert_value(ngx_rbtree_node_t *temp,
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1964 ngx_rbtree_node_t *node, ngx_rbtree_node_t *sentinel)
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1965 {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1966 ngx_str_node_t *n, *t;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1967 ngx_rbtree_node_t **p;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1968
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1969 for ( ;; ) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1970
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1971 n = (ngx_str_node_t *) node;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1972 t = (ngx_str_node_t *) temp;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1973
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1974 if (node->key != temp->key) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1975
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1976 p = (node->key < temp->key) ? &temp->left : &temp->right;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1977
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1978 } else if (n->str.len != t->str.len) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1979
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1980 p = (n->str.len < t->str.len) ? &temp->left : &temp->right;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1981
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1982 } else {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1983 p = (ngx_memcmp(n->str.data, t->str.data, n->str.len) < 0)
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1984 ? &temp->left : &temp->right;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1985 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1986
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1987 if (*p == sentinel) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1988 break;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1989 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1990
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1991 temp = *p;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1992 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1993
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1994 *p = node;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1995 node->parent = temp;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1996 node->left = sentinel;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1997 node->right = sentinel;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1998 ngx_rbt_red(node);
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
1999 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2000
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2001
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2002 ngx_str_node_t *
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2003 ngx_str_rbtree_lookup(ngx_rbtree_t *rbtree, ngx_str_t *val, uint32_t hash)
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2004 {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2005 ngx_int_t rc;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2006 ngx_str_node_t *n;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2007 ngx_rbtree_node_t *node, *sentinel;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2008
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2009 node = rbtree->root;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2010 sentinel = rbtree->sentinel;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2011
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2012 while (node != sentinel) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2013
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2014 n = (ngx_str_node_t *) node;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2015
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2016 if (hash != node->key) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2017 node = (hash < node->key) ? node->left : node->right;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2018 continue;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2019 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2020
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2021 if (val->len != n->str.len) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2022 node = (val->len < n->str.len) ? node->left : node->right;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2023 continue;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2024 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2025
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2026 rc = ngx_memcmp(val->data, n->str.data, val->len);
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2027
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2028 if (rc < 0) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2029 node = node->left;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2030 continue;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2031 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2032
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2033 if (rc > 0) {
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2034 node = node->right;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2035 continue;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2036 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2037
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2038 return n;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2039 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2040
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2041 return NULL;
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2042 }
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2043
6802ba529ec4 change ngx_http_variable_value_node_t to more generic ngx_str_node_t
Igor Sysoev <igor@sysoev.ru>
parents: 3515
diff changeset
2044
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2045 /* ngx_sort() is implemented as insertion sort because we need stable sort */
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2046
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2047 void
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2048 ngx_sort(void *base, size_t n, size_t size,
1956
cb8c0c8e0c27 use ngx_int_t in ngx_sort() callback
Igor Sysoev <igor@sysoev.ru>
parents: 1955
diff changeset
2049 ngx_int_t (*cmp)(const void *, const void *))
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2050 {
1955
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2051 u_char *p1, *p2, *p;
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2052
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2053 p = ngx_alloc(size, ngx_cycle->log);
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2054 if (p == NULL) {
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2055 return;
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2056 }
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2057
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2058 for (p1 = (u_char *) base + size;
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2059 p1 < (u_char *) base + n * size;
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2060 p1 += size)
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2061 {
1955
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2062 ngx_memcpy(p, p1, size);
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2063
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2064 for (p2 = p1;
1955
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2065 p2 > (u_char *) base && cmp(p2 - size, p) > 0;
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2066 p2 -= size)
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2067 {
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2068 ngx_memcpy(p2, p2 - size, size);
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2069 }
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2070
1955
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2071 ngx_memcpy(p2, p, size);
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2072 }
1955
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2073
466fdc84c82d use dynamically allocated buffer in ngx_sort()
Igor Sysoev <igor@sysoev.ru>
parents: 1867
diff changeset
2074 ngx_free(p);
1208
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2075 }
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2076
5eae5751507f ngx_sort
Igor Sysoev <igor@sysoev.ru>
parents: 1107
diff changeset
2077
7395
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2078 void
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2079 ngx_explicit_memzero(void *buf, size_t n)
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2080 {
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2081 ngx_memzero(buf, n);
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2082 ngx_memory_barrier();
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2083 }
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2084
9ca82f273967 Core: ngx_explicit_memzero().
Maxim Dounin <mdounin@mdounin.ru>
parents: 7120
diff changeset
2085
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2086 #if (NGX_MEMCPY_LIMIT)
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2087
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2088 void *
4781
814541b2ec23 Added "const" to ngx_memcpy() with NGX_MEMCPY_LIMIT defined.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4604
diff changeset
2089 ngx_memcpy(void *dst, const void *src, size_t n)
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2090 {
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2091 if (n > NGX_MEMCPY_LIMIT) {
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2092 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, "memcpy %uz bytes", n);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2093 ngx_debug_point();
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2094 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2095
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2096 return memcpy(dst, src, n);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2097 }
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2098
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
2099 #endif