#include <u.h>
#include <libc.h>
#include <bin.h>
#include <httpd.h>

/* go from url with escaped utf to utf */
char *
hurlunesc(HConnect *cc, char *s)
{
       char *t, *v, *u;
       Rune r;
       int c, n;

       /* unescape */
       u = halloc(cc, strlen(s)+1);
       for(t = u; c = *s; s++){
               if(c == '%'){
                       n = s[1];
                       if(n >= '0' && n <= '9')
                               n = n - '0';
                       else if(n >= 'A' && n <= 'F')
                               n = n - 'A' + 10;
                       else if(n >= 'a' && n <= 'f')
                               n = n - 'a' + 10;
                       else
                               break;
                       r = n;
                       n = s[2];
                       if(n >= '0' && n <= '9')
                               n = n - '0';
                       else if(n >= 'A' && n <= 'F')
                               n = n - 'A' + 10;
                       else if(n >= 'a' && n <= 'f')
                               n = n - 'a' + 10;
                       else
                               break;
                       s += 2;
                       c = (r<<4)+n;
               }
               *t++ = c;
       }
       *t = '\0';

       /* convert to valid utf */
       v = halloc(cc, UTFmax*strlen(u) + 1);
       s = u;
       t = v;
       while(*s){
               /* in decoding error, assume latin1 */
               if((n=chartorune(&r, s)) == 1 && r == Runeerror)
                       r = (uchar)*s;
               s += n;
               t += runetochar(t, &r);
       }
       *t = '\0';

       return v;
}