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';
+}