# HG changeset patch # User Olaf Wintermann # Date 1764620514 -3600 # Node ID ffbc5076b4bf8d745eb81628e6d9439b1e0b4886 # Parent f64ebb0c5fa9a2faa194500ed82dc9aa4543d1ae add rewrite_rule_create diff -r f64ebb0c5fa9 -r ffbc5076b4bf src/server/daemon/rewrite.c --- 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(®, 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; diff -r f64ebb0c5fa9 -r ffbc5076b4bf src/server/daemon/rewrite.h --- 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,