summaryrefslogtreecommitdiff
path: root/xs_url.h
diff options
context:
space:
mode:
authorGravatar ltning2025-01-27 18:07:00 +0000
committerGravatar ltning2025-01-27 18:07:00 +0000
commitf6044d3aa0241a832b0ad1d2c394c0a1b814dbe3 (patch)
tree72334e7a24b997957d201490681552b6b1ad2e2f /xs_url.h
parentAdd short_description_raw option (diff)
parentFixed crash in the notification area after deleting a post. (diff)
downloadsnac2-f6044d3aa0241a832b0ad1d2c394c0a1b814dbe3.tar.gz
snac2-f6044d3aa0241a832b0ad1d2c394c0a1b814dbe3.tar.xz
snac2-f6044d3aa0241a832b0ad1d2c394c0a1b814dbe3.zip
Merge branch 'master' into master
Diffstat (limited to 'xs_url.h')
-rw-r--r--xs_url.h25
1 files changed, 24 insertions, 1 deletions
diff --git a/xs_url.h b/xs_url.h
index ac43585..3c24736 100644
--- a/xs_url.h
+++ b/xs_url.h
@@ -1,10 +1,11 @@
1/* copyright (c) 2022 - 2024 grunfink et al. / MIT license */ 1/* copyright (c) 2022 - 2025 grunfink et al. / MIT license */
2 2
3#ifndef _XS_URL_H 3#ifndef _XS_URL_H
4 4
5#define _XS_URL_H 5#define _XS_URL_H
6 6
7xs_str *xs_url_dec(const char *str); 7xs_str *xs_url_dec(const char *str);
8xs_str *xs_url_enc(const char *str);
8xs_dict *xs_url_vars(const char *str); 9xs_dict *xs_url_vars(const char *str);
9xs_dict *xs_multipart_form_data(const char *payload, int p_size, const char *header); 10xs_dict *xs_multipart_form_data(const char *payload, int p_size, const char *header);
10 11
@@ -39,6 +40,28 @@ xs_str *xs_url_dec(const char *str)
39} 40}
40 41
41 42
43xs_str *xs_url_enc(const char *str)
44/* URL-encodes a string (RFC 3986) */
45{
46 xs_str *s = xs_str_new(NULL);
47
48 while (*str) {
49 if (isalnum(*str) || strchr("-._~", *str)) {
50 s = xs_append_m(s, str, 1);
51 }
52 else {
53 char tmp[8];
54 snprintf(tmp, sizeof(tmp), "%%%02X", (unsigned char)*str);
55 s = xs_append_m(s, tmp, 3);
56 }
57
58 str++;
59 }
60
61 return s;
62}
63
64
42xs_dict *xs_url_vars(const char *str) 65xs_dict *xs_url_vars(const char *str)
43/* parse url variables */ 66/* parse url variables */
44{ 67{