"Kyle J. McKay" <mackyle@xxxxxxxxx> writes: > +#define URL_ALPHA "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" > +#define URL_DIGIT "0123456789" > +#define URL_HEXDIGIT URL_DIGIT "ABCDEFabcdef" > +#define URL_ALPHADIGIT URL_ALPHA URL_DIGIT > +#define URL_SCHEME_CHARS URL_ALPHADIGIT "+.-" > +#define URL_HOST_CHARS URL_ALPHADIGIT ".-[:]" /* IPv6 literals need [:] */ > +#define URL_UNSAFE_CHARS " <>\"%{}|\\^`" /* plus 0x00-0x1F,0x7F-0xFF */ > +#define URL_GEN_RESERVED ":/?#[]@" > +#define URL_SUB_RESERVED "!$&'()*+,;=" > +#define URL_RESERVED URL_GEN_RESERVED URL_SUB_RESERVED /* only allowed delims */ > + ... > + while (from_len) { > + int ch = *from++; > + int was_esc = 0; > + > + from_len--; > + if (ch == '%') { > + if (from_len < 2 || > + !strchr(URL_HEXDIGIT, from[0]) || > + !strchr(URL_HEXDIGIT, from[1])) I actually do like the readability of the approach in this patch, but these repeated strchrs() in a loop may want to be optimized, using a trick similar to what is used in ctype.c::sane_ctype[]. A small build-time-only program or script gen-http-ctype.perl that defines and uses these URL_* cpp macros and generates a C source file http-ctype-gen.c that can be #included from http.c, with something like this in the Makefile: http-ctype-gen.c: gen-http-ctype.perl rm -f $@ $@+ $(PERL_PATH) gen-http-ctype.perl >$@+ mv $@+ $@ http.o: http.c http-ctype-gen.c would give us both readability and efficiency, perhaps? -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html