X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=lib%2Furl.c;h=a6dcf7aa06fe4f1335edbe921359136b17bed1dc;hb=23552983305e667eeb772406d1745ab7b865855e;hp=7b0548ca9f193f6bf4811b3e63277cf027296e70;hpb=7009a1097a86f336caf029b7592d1188c4cb2b57;p=libucw.git diff --git a/lib/url.c b/lib/url.c index 7b0548ca..a6dcf7aa 100644 --- a/lib/url.c +++ b/lib/url.c @@ -18,7 +18,7 @@ static uns url_ignore_spaces; static uns url_ignore_underflow; -static byte *url_component_separators = "/&?"; +static byte *url_component_separators = ""; static uns url_min_repeat_count = 0x7fffffff; static uns url_max_repeat_length = 0; @@ -500,7 +500,7 @@ url_error(uns err) return errmsg[err]; } -/* A "macro" for canonical split */ +/* Standard cookbook recipes */ int url_canon_split(byte *u, byte *buf1, byte *buf2, struct url *url) @@ -516,6 +516,19 @@ url_canon_split(byte *u, byte *buf1, byte *buf2, struct url *url) return url_canonicalize(url); } +int +url_auto_canonicalize(byte *src, byte *dst) +{ + byte buf1[MAX_URL_SIZE], buf2[MAX_URL_SIZE], buf3[MAX_URL_SIZE]; + int err; + struct url ur; + + (void)((err = url_canon_split(src, buf1, buf2, &ur)) || + (err = url_pack(&ur, buf3)) || + (err = url_enescape(buf3, dst))); + return err; +} + /* Testing */ #ifdef TEST @@ -630,6 +643,8 @@ url_has_repeated_component(byte *url) if (c) c++; } + if (comps < url_min_repeat_count) + return 0; comp = alloca(comps * sizeof(struct component)); for (i=0, c=url; c; i++) {