add rewrite_rule_create

Mon, 01 Dec 2025 21:21:54 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Mon, 01 Dec 2025 21:21:54 +0100
changeset 647
ffbc5076b4bf
parent 646
f64ebb0c5fa9
child 648
205d41b19a13

add rewrite_rule_create

src/server/daemon/rewrite.c file | annotate | diff | comparison | revisions
src/server/daemon/rewrite.h file | annotate | diff | comparison | revisions
--- a/src/server/daemon/rewrite.c	Mon Dec 01 21:16:45 2025 +0100
+++ b/src/server/daemon/rewrite.c	Mon Dec 01 21:21:54 2025 +0100
@@ -28,6 +28,31 @@
 
 #include "rewrite.h"
 
+
+RewriteRule* rewrite_rule_create(const CxAllocator *a, cxmutstr regex, cxmutstr url) {
+    regex_t reg;
+    if(regex.ptr) {
+        if(regcomp(&reg, regex.ptr, REG_EXTENDED)) {
+            log_ereport(LOG_FAILURE, "rewrite: cannot compile regex: %s", regex.ptr);
+            return NULL;
+        }
+    }
+    
+    RewriteRule *rule = cxMalloc(a, sizeof(RewriteRule));
+    if(!rule) {
+        return NULL;
+    }
+    rule->has_regex = regex.ptr != NULL;
+    rule->regex = reg;
+    rule->url = string_template_compile(a, cx_strcast(url));
+    if(!rule->url) {
+        return NULL;
+    }
+    
+    return rule;
+}
+
+
 typedef struct RVar {
     cxstring str;
     regmatch_t *match;
--- a/src/server/daemon/rewrite.h	Mon Dec 01 21:16:45 2025 +0100
+++ b/src/server/daemon/rewrite.h	Mon Dec 01 21:21:54 2025 +0100
@@ -44,11 +44,6 @@
     
 typedef struct RewriteRule {
     /*
-     * uncompiled regex string
-     */
-    cxmutstr match;
-    
-    /*
      * Compiled match regex
      */
     regex_t regex;
@@ -64,6 +59,8 @@
     StringTemplate *url;
 } RewriteRule;
 
+RewriteRule* rewrite_rule_create(const CxAllocator *a, cxmutstr regex, cxmutstr url);
+
 int rewrite_url(
         RewriteRule *rule,
         regmatch_t *match,

mercurial