blob: 1e6ee6404fea72329b4ddf46f6e81c2355a3babd [file] [log] [blame]
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00001
2#include <ngx_config.h>
Igor Sysoevdc479b42003-03-20 16:09:44 +00003#include <ngx_core.h>
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00004
5
Igor Sysoev10a543a2004-03-16 07:10:12 +00006u_char *ngx_cpystrn(u_char *dst, u_char *src, size_t n)
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00007{
Igor Sysoev3d09c8d2003-05-06 17:03:16 +00008 if (n == 0) {
Igor Sysoev6de5c2c2002-08-06 16:39:45 +00009 return dst;
Igor Sysoev3d09c8d2003-05-06 17:03:16 +000010 }
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000011
12 for (/* void */; --n; dst++, src++) {
13 *dst = *src;
14
Igor Sysoev3d09c8d2003-05-06 17:03:16 +000015 if (*dst == '\0') {
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000016 return dst;
Igor Sysoev3d09c8d2003-05-06 17:03:16 +000017 }
Igor Sysoev6de5c2c2002-08-06 16:39:45 +000018 }
19
20 *dst = '\0';
21
22 return dst;
23}
Igor Sysoevdc479b42003-03-20 16:09:44 +000024
25
Igor Sysoev10a543a2004-03-16 07:10:12 +000026ngx_int_t ngx_rstrncmp(u_char *s1, u_char *s2, size_t n)
Igor Sysoev3d09c8d2003-05-06 17:03:16 +000027{
28 if (n == 0) {
29 return 0;
30 }
31
32 n--;
33
34 for ( ;; ) {
35 if (s1[n] != s2[n]) {
Igor Sysoev10a543a2004-03-16 07:10:12 +000036 return s1[n] - s2[n];
Igor Sysoev3d09c8d2003-05-06 17:03:16 +000037 }
38
39 if (n == 0) {
40 return 0;
41 }
42
43 n--;
44 }
45}
46
47
Igor Sysoev10a543a2004-03-16 07:10:12 +000048ngx_int_t ngx_atoi(u_char *line, size_t n)
Igor Sysoevdc479b42003-03-20 16:09:44 +000049{
Igor Sysoev10a543a2004-03-16 07:10:12 +000050 ngx_int_t value;
Igor Sysoevdc479b42003-03-20 16:09:44 +000051
Igor Sysoev3d09c8d2003-05-06 17:03:16 +000052 if (n == 0) {
53 return NGX_ERROR;
54 }
55
Igor Sysoevdc479b42003-03-20 16:09:44 +000056 for (value = 0; n--; line++) {
Igor Sysoev1d8d9ee2003-04-28 15:06:39 +000057 if (*line < '0' || *line > '9') {
58 return NGX_ERROR;
59 }
Igor Sysoevdc479b42003-03-20 16:09:44 +000060
Igor Sysoev1d8d9ee2003-04-28 15:06:39 +000061 value = value * 10 + (*line - '0');
Igor Sysoevdc479b42003-03-20 16:09:44 +000062 }
63
Igor Sysoev1d8d9ee2003-04-28 15:06:39 +000064 if (value < 0) {
65 return NGX_ERROR;
Igor Sysoev18684bd2004-05-20 17:33:52 +000066
67 } else {
68 return value;
69 }
70}
71
72
73ngx_int_t ngx_hextoi(u_char *line, size_t n)
74{
75 u_char ch;
76 ngx_int_t value;
77
78 if (n == 0) {
79 return NGX_ERROR;
80 }
81
82 for (value = 0; n--; line++) {
83 ch = *line;
84
85 if (ch >= '0' && ch <= '9') {
86 value = value * 16 + (ch - '0');
87 continue;
88 }
89
90 if (ch >= 'A' && ch <= 'F') {
Igor Sysoev01b5eab2004-05-21 16:12:13 +000091 value = value * 16 + (ch - 'A' + 10);
Igor Sysoev18684bd2004-05-20 17:33:52 +000092 continue;
93 }
94
95 if (ch >= 'a' && ch <= 'f') {
Igor Sysoev01b5eab2004-05-21 16:12:13 +000096 value = value * 16 + (ch - 'a' + 10);
Igor Sysoev18684bd2004-05-20 17:33:52 +000097 continue;
98 }
99
100 return NGX_ERROR;
101 }
102
103 if (value < 0) {
104 return NGX_ERROR;
105
Igor Sysoev1d8d9ee2003-04-28 15:06:39 +0000106 } else {
107 return value;
108 }
Igor Sysoevdc479b42003-03-20 16:09:44 +0000109}
110
111
Igor Sysoev10a543a2004-03-16 07:10:12 +0000112void ngx_md5_text(u_char *text, u_char *md5)
Igor Sysoev9cc1ace2003-11-04 22:12:39 +0000113{
Igor Sysoev10a543a2004-03-16 07:10:12 +0000114 int i;
115 static u_char hex[] = "0123456789abcdef";
Igor Sysoeve8732b02003-11-05 17:03:41 +0000116
Igor Sysoev74e95c22003-11-09 20:03:38 +0000117 for (i = 0; i < 16; i++) {
118 *text++ = hex[md5[i] >> 4];
119 *text++ = hex[md5[i] & 0xf];
120 }
121
122 *text = '\0';
Igor Sysoev9cc1ace2003-11-04 22:12:39 +0000123}
124
125
Igor Sysoevdc479b42003-03-20 16:09:44 +0000126#if 0
127char *ngx_psprintf(ngx_pool_t *p, const char *fmt, ...)
128{
129 va_list args;
130
131 va_start(args, fmt);
132
133 while (*fmt) {
134 switch(*fmt++) {
135 case '%':
136 switch(*fmt++) {
137 case 's':
138 s = va_arg(args, char *);
139 n += ngx_strlen(s);
140 break;
141
142 default:
143 n++;
144 }
145 default:
146 n++;
147 }
148 }
149
150 str = ngx_palloc(p, n);
151
152 va_start(args, fmt);
153
154 for (i = 0; i < n; i++) {
155 switch(*fmt++) {
156 case '%':
157 switch(*fmt++) {
158 case 's':
159 s = va_arg(args, char *);
160 while (str[i++] = s);
161 break;
162
163 default:
164 n++;
165 }
166 default:
167 str[i] = *fmt;
168 }
169 }
170
171 len += ngx_vsnprintf(errstr + len, sizeof(errstr) - len - 1, fmt, args);
172
173 va_end(args);
174
175}
176#endif