Mercurial
diff seobeo/s_web.c @ 147:6de849867459 hg-web
[HgWeb] Updated logic to use Seobeo Client.
| author | June Park <parkjune1995@gmail.com> |
|---|---|
| date | Fri, 09 Jan 2026 18:39:34 -0800 |
| parents | 1c4d8873e846 |
| children | 827c6ac504cd |
line wrap: on
line diff
--- a/seobeo/s_web.c Fri Jan 09 13:45:29 2026 -0800 +++ b/seobeo/s_web.c Fri Jan 09 18:39:34 2026 -0800 @@ -756,5 +756,43 @@ g_routes = NULL; } -// Logging functions moved to s_logging.c +// Written by AI. I don't know what it does. +void Seobeo_Url_Decode(char *dst, const char *src) +{ + char a, b; + while (*src) { + /* Check if we have a % followed by two valid hex characters */ + if (*src == '%' && src[1] && src[2]) { + a = src[1]; + b = src[2]; + + /* Manual isxdigit check and conversion for 'a' */ + int a_val = -1; + if (a >= '0' && a <= '9') a_val = a - '0'; + else if (a >= 'a' && a <= 'f') a_val = a - 'a' + 10; + else if (a >= 'A' && a <= 'F') a_val = a - 'A' + 10; + /* Manual isxdigit check and conversion for 'b' */ + int b_val = -1; + if (b >= '0' && b <= '9') b_val = b - '0'; + else if (b >= 'a' && b <= 'f') b_val = b - 'a' + 10; + else if (b >= 'A' && b <= 'F') b_val = b - 'A' + 10; + + /* If both were valid hex, combine them */ + if (a_val != -1 && b_val != -1) { + *dst++ = (char)((a_val << 4) | b_val); + src += 3; + continue; + } + } + + /* Handle '+' as space, otherwise copy character literally */ + if (*src == '+') { + *dst++ = ' '; + } else { + *dst++ = *src; + } + src++; + } + *dst = '\0'; +}