src/server/util/util.c

changeset 59
ab25c0a231d0
parent 58
66c22e54aa90
child 62
c47e081b6c0f
equal deleted inserted replaced
58:66c22e54aa90 59:ab25c0a231d0
190 } 190 }
191 } 191 }
192 return 500; 192 return 500;
193 } 193 }
194 194
195 NSAPI_PUBLIC int util_uri_unescape_strict(char *s)
196 {
197 char *t, *u, t1, t2;
198 int rv = 1;
199
200 for(t = s, u = s; *t; ++t, ++u) {
201 if (*t == '%') {
202 t1 = t[1] & 0xdf; /* [a-f] -> [A-F] */
203 if ((t1 < 'A' || t1 > 'F') && (t[1] < '0' || t[1] > '9'))
204 rv = 0;
205
206 t2 = t[2] & 0xdf; /* [a-f] -> [A-F] */
207 if ((t2 < 'A' || t2 > 'F') && (t[2] < '0' || t[2] > '9'))
208 rv = 0;
209
210 *u = ((t[1] >= 'A' ? ((t[1] & 0xdf) - 'A')+10 : (t[1] - '0'))*16) +
211 (t[2] >= 'A' ? ((t[2] & 0xdf) - 'A')+10 : (t[2] - '0'));
212 t += 2;
213 }
214 else if (u != t)
215 *u = *t;
216 }
217 *u = *t;
218
219 return rv;
220 }
195 221
196 NSAPI_PUBLIC 222 NSAPI_PUBLIC
197 sstr_t util_path_append(pool_handle_t *pool, char *path, char *ch) { 223 sstr_t util_path_append(pool_handle_t *pool, char *path, char *ch) {
198 sstr_t parent = sstr(path); 224 sstr_t parent = sstr(path);
199 sstr_t child = sstr(ch); 225 sstr_t child = sstr(ch);
209 } 235 }
210 236
211 newstr.ptr = pool_malloc(pool, newstr.length + 1); 237 newstr.ptr = pool_malloc(pool, newstr.length + 1);
212 if(!newstr.ptr) { 238 if(!newstr.ptr) {
213 // TODO: error 239 // TODO: error
240 newstr.length = 0;
214 return newstr; 241 return newstr;
215 } 242 }
216 if(s.length == 1) { 243 if(s.length == 1) {
217 newstr = sstrncat(3, newstr, parent, s, child); 244 newstr = sstrncat(3, newstr, parent, s, child);
218 } else { 245 } else {

mercurial