X-Git-Url: https://git.distorted.org.uk/~mdw/mLib/blobdiff_plain/18c831dcd0ae4d660c70ccac69d27ed2a97851be..3618811496a6d131fd4bffa19e262c521d39e819:/codec/url.c diff --git a/codec/url.c b/codec/url.c index f502f7c..eecfe82 100644 --- a/codec/url.c +++ b/codec/url.c @@ -33,6 +33,7 @@ #include #include "dstr.h" +#include "macros.h" #include "url.h" /*----- Main code ---------------------------------------------------------*/ @@ -63,32 +64,19 @@ static void encode(url_ectx *ctx, dstr *d, const char *p) { while (*p) { switch (*p) { - case ' ': - DPUTC(d, '+'); + case ' ': DPUTC(d, '+'); break; default: - if ((ctx->f & URLF_LAX) || isalnum((unsigned char)*p)) - goto safe; - else - goto unsafe; - case '/': - case '~': - if (ctx->f & URLF_STRICT) - goto unsafe; - case '-': - case '.': - case '_': - safe: - DPUTC(d, *p); - break; - unsafe: - case '+': - case '%': - case '=': - case '&': - case ';': - dstr_putf(d, "%%%02x", *p); - break; + if (ISSPACE(*p)) goto unsafe; + else if (ISALNUM(*p)) goto safe; + else if (ctx->f&URLF_LAX) goto safe; + else goto unsafe; + case '/': case '~': + if (ctx->f&URLF_STRICT) goto unsafe; /* else fall through... */ + safe: case '-': case '.': case '_': + DPUTC(d, *p); break; + unsafe: case '+': case '%': case '=': case '&': case ';': + dstr_putf(d, "%%%02x", *p); break; } p++; }