From edc791c3a8254f755b2c3ad3d1d2584d384b52af Mon Sep 17 00:00:00 2001 From: bpc2003 Date: Wed, 12 Mar 2025 14:29:39 -0400 Subject: Fixed some memory bugs --- src/cmd.c | 11 ++++++++--- src/cmd.h | 1 + src/main.c | 10 ++++++---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/cmd.c b/src/cmd.c index d121be1..d6093a2 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -4,7 +4,7 @@ #include "cmd.h" char *getselector(char *str); -char **getparams(char *str); +char **getparams(char *str, int *len); struct cmd eval(char *str) { @@ -23,7 +23,7 @@ struct cmd eval(char *str) } ret.selector = getselector(str); - ret.params = getparams(str); + ret.params = getparams(str, &ret.plen); return ret; } @@ -42,7 +42,7 @@ char *getselector(char *str) return selector; } -char **getparams(char *str) +char **getparams(char *str, int *len) { char **params = calloc(1, sizeof(char *)); char *tok = strtok(str, "/"); @@ -53,5 +53,10 @@ char **getparams(char *str) params[i] = calloc(strlen(tok) + 1, sizeof(char)); strcpy(params[i++], tok); } + if (i == 0) { + free(params); + return NULL; + } + *len = i; return params; } diff --git a/src/cmd.h b/src/cmd.h index a3e3fe8..8424a36 100644 --- a/src/cmd.h +++ b/src/cmd.h @@ -9,6 +9,7 @@ enum cmdtype { struct cmd { enum cmdtype type; char *selector; + int plen; char **params; }; diff --git a/src/main.c b/src/main.c index deec7f3..921a252 100644 --- a/src/main.c +++ b/src/main.c @@ -33,11 +33,13 @@ int main(int argc, char **argv) break; } printf("%s\n", evaled.selector); - for (int i = 0; evaled.params[i]; ++i) { - printf("%s\n", evaled.params[i]); - free(evaled.params[i]); + if (evaled.params != NULL) { + for (int i = 0; i < evaled.plen; ++i) { + printf("%s\n", evaled.params[i]); + free(evaled.params[i]); + } + free(evaled.params); } - free(evaled.params); free(evaled.selector); } free(cmd); -- cgit v1.2.3