commit 579e21b35a0ad4cf3540ed474c994ace0e97a286 from: Omar Polo date: Sat Jan 09 20:38:26 2021 UTC switch some macros to inline functions they expanded multiple times their argument, since inline is standard (and works on GCC 4 too!) why don't use it? commit - ef04b55160759b22db67f14c703a4343c4741e8b commit + 579e21b35a0ad4cf3540ed474c994ace0e97a286 blob - 5af32b78c6b1a896154993dab383ded90d3f6ee4 blob + 1258abbf91161ba655231f964d5e501b4c7c4e67 --- uri.c +++ uri.c @@ -87,27 +87,31 @@ * */ -/* XXX: these macros will expand multiple times their argument */ +static inline int +unreserved(int p) +{ + return isalnum(p) + || p == '-' + || p == '.' + || p == '_' + || p == '~'; +} -#define UNRESERVED(p) \ - (isalnum(p) \ - || p == '-' \ - || p == '.' \ - || p == '_' \ - || p == '~') - -#define SUB_DELIMITERS(p) \ - (p == '!' \ - || p == '$' \ - || p == '&' \ - || p == '\'' \ - || p == '(' \ - || p == ')' \ - || p == '*' \ - || p == '+' \ - || p == ',' \ - || p == ';' \ - || p == '=') +static inline int +sub_delimiters(int p) +{ + return p == '!' + || p == '$' + || p == '&' + || p == '\'' + || p == '(' + || p == ')' + || p == '*' + || p == '+' + || p == ',' + || p == ';' + || p == '='; +} static int parse_pct_encoded(struct parser *p) @@ -201,8 +205,8 @@ parse_authority(struct parser *p) { p->parsed->host = p->uri; - while (UNRESERVED(*p->uri) - || SUB_DELIMITERS(*p->uri) + while (unreserved(*p->uri) + || sub_delimiters(*p->uri) || parse_pct_encoded(p)) p->uri++; @@ -305,8 +309,8 @@ parse_query(struct parser *p) if (*p->uri == '\0') return 1; - while (UNRESERVED(*p->uri) - || SUB_DELIMITERS(*p->uri) + while (unreserved(*p->uri) + || sub_delimiters(*p->uri) || *p->uri == '/' || *p->uri == '?' || parse_pct_encoded(p) @@ -350,8 +354,8 @@ parse_path(struct parser *p) return 1; } - while (UNRESERVED(*p->uri) - || SUB_DELIMITERS(*p->uri) + while (unreserved(*p->uri) + || sub_delimiters(*p->uri) || *p->uri == '/' || parse_pct_encoded(p) || valid_multibyte_utf8(p))