Mercurial > hg > nginx
comparison src/core/ngx_string.c @ 404:37b5381fb6d8
nginx-0.0.9-2004-07-30-21:05:14 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 30 Jul 2004 17:05:14 +0000 |
parents | 8c5b69141dfd |
children | d6e2b445c1b8 |
comparison
equal
deleted
inserted
replaced
403:ea3113b181d1 | 404:37b5381fb6d8 |
---|---|
118 *text++ = hex[md5[i] >> 4]; | 118 *text++ = hex[md5[i] >> 4]; |
119 *text++ = hex[md5[i] & 0xf]; | 119 *text++ = hex[md5[i] & 0xf]; |
120 } | 120 } |
121 | 121 |
122 *text = '\0'; | 122 *text = '\0'; |
123 } | |
124 | |
125 | |
126 ngx_int_t ngx_encode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) | |
127 { | |
128 u_char *d, *s; | |
129 ngx_uint_t i; | |
130 static u_char basis64[] = | |
131 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; | |
132 | |
133 if (!(d = ngx_palloc(pool, ((src->len + 2) / 3) * 4 + 1))) { | |
134 return NGX_ERROR; | |
135 } | |
136 | |
137 dst->data = d; | |
138 s = src->data; | |
139 | |
140 for (i = 0; i < src->len - 2; i += 3) { | |
141 *d++ = basis64[(s[i] >> 2) & 0x3f]; | |
142 *d++ = basis64[((s[i] & 3) << 4) | (s[i + 1] >> 4)]; | |
143 *d++ = basis64[((s[i + 1] & 0x0f) << 2) | (s[i + 2] >> 6)]; | |
144 *d++ = basis64[s[i + 2] & 0x3f]; | |
145 } | |
146 | |
147 if (i < src->len) { | |
148 *d++ = basis64[(s[i] >> 2) & 0x3f]; | |
149 | |
150 if (i == src->len - 1) { | |
151 *d++ = basis64[(s[i] & 3) << 4]; | |
152 *d++ = '='; | |
153 | |
154 } else { | |
155 *d++ = basis64[((s[i] & 3) << 4) | (s[i + 1] >> 4)]; | |
156 *d++ = basis64[(s[i + 1] & 0x0f) << 2]; | |
157 } | |
158 | |
159 *d++ = '='; | |
160 } | |
161 | |
162 dst->len = d - dst->data; | |
163 *d++ = '\0'; | |
164 | |
165 return NGX_OK; | |
166 } | |
167 | |
168 | |
169 ngx_int_t ngx_decode_base64(ngx_pool_t *pool, ngx_str_t *src, ngx_str_t *dst) | |
170 { | |
171 u_char *d, *s, c; | |
172 | |
173 if (!(d = ngx_palloc(pool, ((src->len + 3) / 4) * 3))) { | |
174 return NGX_ABORT; | |
175 } | |
176 | |
177 dst->data = d; | |
178 s = src->data; | |
179 | |
180 if (*s == '+') { | |
181 c = 62; | |
182 | |
183 } else if (*s == '/') { | |
184 c = 63; | |
185 | |
186 } else if (*s >= '0' && *s <= '9') { | |
187 c = *s - '0' + 52; | |
188 | |
189 } else if (*s >= 'A' && *s <= 'Z') { | |
190 c = *s - 'A'; | |
191 | |
192 } else if (*s >= 'a' && *s <= 'z') { | |
193 c = *s - 'a' + 26; | |
194 | |
195 } else { | |
196 return NGX_ERROR; | |
197 } | |
198 | |
199 return NGX_OK; | |
123 } | 200 } |
124 | 201 |
125 | 202 |
126 #if 0 | 203 #if 0 |
127 char *ngx_psprintf(ngx_pool_t *p, const char *fmt, ...) | 204 char *ngx_psprintf(ngx_pool_t *p, const char *fmt, ...) |