utils/macros.h: Add <ctype.h> and `foocmp' helper macros.
[mLib] / codec / url.c
index f502f7c..eecfe82 100644 (file)
@@ -33,6 +33,7 @@
 #include <string.h>
 
 #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++;
   }