urlfmt.c 425 B

1234567891011121314151617181920212223242526
  1. #include <u.h>
  2. #include <libc.h>
  3. #include <bin.h>
  4. #include <httpd.h>
  5. int
  6. hurlfmt(Fmt *f)
  7. {
  8. char buf[HMaxWord*2];
  9. Rune r;
  10. char *s;
  11. int t;
  12. s = va_arg(f->args, char*);
  13. for(t = 0; t < sizeof(buf) - 8; ){
  14. s += chartorune(&r, s);
  15. if(r == 0)
  16. break;
  17. if(r <= ' ' || r == '%' || r >= Runeself)
  18. t += snprint(&buf[t], sizeof(buf)-t, "%%%2.2x", r);
  19. else
  20. buf[t++] = r;
  21. }
  22. buf[t] = 0;
  23. return fmtstrcpy(f, buf);
  24. }