summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbpc2003 <wpesfriendnva@gmail.com>2025-03-12 14:29:39 -0400
committerbpc2003 <wpesfriendnva@gmail.com>2025-03-12 14:29:39 -0400
commitedc791c3a8254f755b2c3ad3d1d2584d384b52af (patch)
tree40b424295daf2b21296a7a93f5d68552115774ec
parent5f5b2e8ce67ce18519aea946a5e86b64384d491f (diff)
Fixed some memory bugs
-rw-r--r--src/cmd.c11
-rw-r--r--src/cmd.h1
-rw-r--r--src/main.c10
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);