- if (!isspace((unsigned char)*p) &&
- ((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;