src/server/util/uri.c

changeset 695
ff14b97bdf14
parent 386
b91f8efadb63
child 696
27e42da5050f
equal deleted inserted replaced
694:a5aa94800b59 695:ff14b97bdf14
265 } 265 }
266 *d = '\0'; 266 *d = '\0';
267 return od; 267 return od;
268 } 268 }
269 269
270 NSAPI_PUBLIC size_t util_uri_escape_s(char *buf, size_t len, const char *s) {
271 char *d = buf;
272 ssize_t dlen = len;
273 if(dlen <= 0) {
274 return 0;
275 }
276
277 while (*s) {
278 if (strchr("% ?#:+&*\"'<>\r\n", *s)) {
279 snprintf(d, dlen, "%%%02x", (unsigned char)*s);
280 ++s;
281 d += 3;
282 dlen -= 3;
283 } else if (0x80 & *s) {
284 snprintf(d, dlen, "%%%02x", (unsigned char)*s);
285 ++s;
286 d += 3;
287 dlen -= 3;
288 } else {
289 *d++ = *s++;
290 dlen--;
291 }
292
293 if(dlen <= 0) {
294 return 0;
295 }
296 }
297 *d = '\0';
298 return d - buf;
299 }
300
270 301
271 /* --------------------------- util_url_escape ---------------------------- */ 302 /* --------------------------- util_url_escape ---------------------------- */
272 303
273 NSAPI_PUBLIC char *util_url_escape(char *od, const char *s) 304 NSAPI_PUBLIC char *util_url_escape(char *od, const char *s)
274 { 305 {

mercurial