From 994225cdb84e6d145200266ea4386391684edd10 Mon Sep 17 00:00:00 2001 From: ame Date: Sun, 1 Sep 2024 20:18:34 -0500 Subject: clean --- src/net/util.c | 110 +++++++++++++++++++++++++++------------------------------ 1 file changed, 53 insertions(+), 57 deletions(-) (limited to 'src/net') diff --git a/src/net/util.c b/src/net/util.c index c25ac39..41069fb 100644 --- a/src/net/util.c +++ b/src/net/util.c @@ -245,68 +245,66 @@ int match_param(char* path, char* match, parray_t* arr){ mi = pi = imatch = start = 0; index = -1; - int step = 0; - //0 increment both - //1 move path to find '}' - //2 move match to find '/' or '\0' + enum steps { + NORMAL, + GET_KEY, + GET_VALUE + }; + + enum steps step = NORMAL; char* name; for(; /*(path[pi] != '\0' || step == 2) && */(match[mi] != '\0' || step == 1);){ - if(step == 0){ - if(path[pi] == '{'){ - - step = 1; - start = pi; - } else if(path[pi] == '*'){ - //printf("found\n"); - index = pi; - imatch = mi; - - } else { - - if(path[pi] != match[mi]){ - //printf("whaa\n"); - if(index == -1) return 0; - //printf("here\n"); - pi = index + 1; - imatch++; - mi = imatch; - + switch(step){ + case NORMAL: + if(path[pi] == '{'){ + + step = GET_KEY; + start = pi; + } else if(path[pi] == '*'){ + index = pi; + imatch = mi; + + } else { + + if(path[pi] != match[mi]){ + if(index == -1) return 0; + + pi = index + 1; + imatch++; + mi = imatch; + continue; + } + mi++; + } + pi++; + break; + case GET_KEY: + if(path[pi] == '}'){ + step = GET_VALUE; + name = calloc(pi - start, sizeof * name); + memcpy(name, path + start + 1, pi - start - 1); + start = mi; } - mi++; - } - pi++; - - } else if (step == 1){ - if(path[pi] == '}'){ - step = 2; - name = calloc(pi - start, sizeof * name); - memcpy(name, path + start + 1, pi - start - 1); - start = mi; - //printf(": "); - } else { - //printf("%c", path[pi]); - } - pi++; - - } else if (step == 2){ - //change this to maybe match the next path char? - if(match[mi] == '/'){ - step = 0; - - char* out = calloc(mi - start, sizeof * out); - memcpy(out, match + start, mi - start); - parray_set(arr, name, out); - free(name); - //printf("\n"); - } else { - //printf("%c", match[mi]); - mi++; - } + pi++; + break; + case GET_VALUE: + //change this to maybe match the next path char? + if(match[mi] == '/'){ + step = NORMAL; + + char* out = calloc(mi - start, sizeof * out); + memcpy(out, match + start, mi - start); + parray_set(arr, name, out); + free(name); + } else { + mi++; + } + break; } } - if(step == 2){ + if(step == GET_VALUE){ char* out = calloc(mi - start, sizeof * out); memcpy(out, match + start, mi - start); parray_set(arr, name, out); @@ -315,8 +313,6 @@ int match_param(char* path, char* match, parray_t* arr){ if(path[pi] != 0) for(; path[pi] == '*'; pi++); - //printf("path: '%s':'%s'\nmatch: '%s':'%s'\nend: %i,%i\n",path, &path[pi], match,&match[mi],path[pi],match[mi]); - return path[pi] == 0 && match[mi] == 0; } -- cgit v1.2.3