summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/serve.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/serve.c b/src/serve.c
index b877dd4..9d0bcf3 100644
--- a/src/serve.c
+++ b/src/serve.c
@@ -217,8 +217,22 @@ route_match(struct gmnisrv_route *route, const char *path, const char **revised)
*revised = &path[l];
}
return true;
- case ROUTE_REGEX:
- assert(0); // TODO
+ case ROUTE_REGEX:;
+ int ncapture = lre_get_capture_count(route->regex);
+ uint8_t **capture = NULL;
+ if (ncapture > 0) {
+ capture = malloc(sizeof(capture[0]) * ncapture * 2);
+ assert(capture);
+ }
+ int r = lre_exec(capture, route->regex,
+ (const uint8_t *)path, 0, strlen(path), 0, NULL);
+ if (r != 1) {
+ free(capture);
+ return false;
+ }
+ // TODO: Process captures and rewrites
+ *revised = path;
+ return true;
}
assert(0); // Invariant