From f15bea6583de0adb6a81642f03c7d2b27ee7bd2b Mon Sep 17 00:00:00 2001 From: Drew DeVault Date: Sun, 1 Nov 2020 09:43:46 -0500 Subject: [PATCH] Implement regex route matching --- src/serve.c | 18 ++++++++++++++++-- 1 file 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