diff options
author | bpc2003 <wpesfriendnva@gmail.com> | 2025-03-12 14:29:39 -0400 |
---|---|---|
committer | bpc2003 <wpesfriendnva@gmail.com> | 2025-03-12 14:29:39 -0400 |
commit | edc791c3a8254f755b2c3ad3d1d2584d384b52af (patch) | |
tree | 40b424295daf2b21296a7a93f5d68552115774ec /src | |
parent | 5f5b2e8ce67ce18519aea946a5e86b64384d491f (diff) |
Fixed some memory bugs
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd.c | 11 | ||||
-rw-r--r-- | src/cmd.h | 1 | ||||
-rw-r--r-- | src/main.c | 10 |
3 files changed, 15 insertions, 7 deletions
@@ -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; } @@ -9,6 +9,7 @@ enum cmdtype { struct cmd { enum cmdtype type; char *selector; + int plen; char **params; }; @@ -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); |