| 500 | #define URL_UNSAFE_CHARS " <>\"%{}|\\^`:?#[]@!$&'()*+,;=" |
| 501 | |
| 502 | void strbuf_add_percentencode(struct strbuf *dst, const char *src, int flags) |
| 503 | { |
| 504 | size_t i, len = strlen(src); |
| 505 | |
| 506 | for (i = 0; i < len; i++) { |
| 507 | unsigned char ch = src[i]; |
| 508 | if (ch <= 0x1F || ch >= 0x7F || |
| 509 | (ch == '/' && (flags & STRBUF_ENCODE_SLASH)) || |
| 510 | ((flags & STRBUF_ENCODE_HOST_AND_PORT) ? |
| 511 | !isalnum(ch) && !strchr("-.:[]", ch) : |
| 512 | !!strchr(URL_UNSAFE_CHARS, ch))) |
| 513 | strbuf_addf(dst, "%%%02X", (unsigned char)ch); |
| 514 | else |
| 515 | strbuf_addch(dst, ch); |
| 516 | } |
| 517 | } |
| 518 | |
| 519 | size_t strbuf_fread(struct strbuf *sb, size_t size, FILE *f) |
| 520 | { |
no test coverage detected