ref: 6b8c36d51f8c68b94f6f3a8712070a924927d677
dir: /sys/src/libhttpd/urlfmt.c/
#include <u.h> #include <libc.h> #include <bin.h> #include <httpd.h> int hurlfmt(Fmt *f) { char buf[HMaxWord*2]; Rune r; char *s; int t; s = va_arg(f->args, char*); for(t = 0; t < sizeof(buf) - 8; ){ s += chartorune(&r, s); if(r == 0) break; if(r <= ' ' || r == '%' || r >= Runeself) t += snprint(&buf[t], sizeof(buf)-t, "%%%2.2x", r); else buf[t++] = r; } buf[t] = 0; return fmtstrcpy(f, buf); }