diff options
| author | violette <vi@violette.town> | 2025-12-18 07:58:24 +0100 |
|---|---|---|
| committer | grunfink <grunfink@comam.es> | 2025-12-18 07:58:24 +0100 |
| commit | 85ed0eb0d535700a5df837c37f51848811e461a0 (patch) | |
| tree | 818c80cc48c445b2950796230946c63eca3a3242 /xs_url.h | |
| parent | e66446a57d79623227353e57cd553cbb42e4ca93 (diff) | |
Added emoji reactions (contributed by violette).
Diffstat (limited to 'xs_url.h')
| -rw-r--r-- | xs_url.h | 33 |
1 files changed, 33 insertions, 0 deletions
@@ -6,6 +6,7 @@ xs_str *xs_url_dec(const char *str); xs_str *xs_url_enc(const char *str); +xs_str *xs_url_dec_emoji(const char *str); xs_dict *xs_url_vars(const char *str); xs_dict *xs_multipart_form_data(const char *payload, int p_size, const char *header); @@ -79,6 +80,38 @@ xs_str *xs_url_dec(const char *str) } +xs_str *xs_url_dec_emoji(const char *str) +/* decodes an URL, returns NULL if not every char is an encoded hex */ +{ + xs_str *s = xs_str_new(NULL); + + while (*str) { + if (!xs_is_string(str)) + break; + + if (*str == '%') { + unsigned int i; + + if (sscanf(str + 1, "%02x", &i) == 1) { + unsigned char uc = i; + + if (!xs_is_string((char *)&uc)) + break; + + s = xs_append_m(s, (char *)&uc, 1); + str += 2; + } + } + else + return NULL; + + str++; + } + + return s; +} + + xs_str *xs_url_enc(const char *str) /* URL-encodes a string (RFC 3986) */ { |