Update TortoiseGitPlink to PuTTY Plink 0.78
[TortoiseGit.git] / src / TortoisePlink / utils / percent_decode.c
bloba312d1dccfe75e890312670d830ecabb89ec20af
1 /*
2 * Decode %-encoding in URL style.
3 */
5 #include <ctype.h>
7 #include "misc.h"
9 void percent_decode_bs(BinarySink *bs, ptrlen data)
11 for (const char *p = data.ptr, *e = ptrlen_end(data); p < e; p++) {
12 char c = *p;
13 if (c == '%' && e-p >= 3 &&
14 isxdigit((unsigned char)p[1]) &&
15 isxdigit((unsigned char)p[2])) {
16 char hex[3];
17 hex[0] = p[1];
18 hex[1] = p[2];
19 hex[2] = '\0';
20 put_byte(bs, strtoul(hex, NULL, 16));
21 p += 2;
22 } else {
23 put_byte(bs, c);
29 void percent_decode_fp(FILE *fp, ptrlen data)
31 stdio_sink ss;
32 stdio_sink_init(&ss, fp);
33 percent_decode_bs(BinarySink_UPCAST(&ss), data);
36 strbuf *percent_decode_sb(ptrlen data)
38 strbuf *sb = strbuf_new();
39 percent_decode_bs(BinarySink_UPCAST(sb), data);
40 return sb;