summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd.c16
-rw-r--r--src/cmd.h2
-rw-r--r--src/main.c6
3 files changed, 22 insertions, 2 deletions
diff --git a/src/cmd.c b/src/cmd.c
index 266f17b..d121be1 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -4,6 +4,7 @@
#include "cmd.h"
char *getselector(char *str);
+char **getparams(char *str);
struct cmd eval(char *str)
{
@@ -22,6 +23,7 @@ struct cmd eval(char *str)
}
ret.selector = getselector(str);
+ ret.params = getparams(str);
return ret;
}
@@ -39,3 +41,17 @@ char *getselector(char *str)
selector[i] = '\0';
return selector;
}
+
+char **getparams(char *str)
+{
+ char **params = calloc(1, sizeof(char *));
+ char *tok = strtok(str, "/");
+ int i = 0;
+ while ((tok = strtok(NULL, "/"))) {
+ if (i >= 1)
+ params = realloc(params, (i + 1) * sizeof(char *));
+ params[i] = calloc(strlen(tok) + 1, sizeof(char));
+ strcpy(params[i++], tok);
+ }
+ return params;
+}
diff --git a/src/cmd.h b/src/cmd.h
index 5b0e7c8..a3e3fe8 100644
--- a/src/cmd.h
+++ b/src/cmd.h
@@ -9,7 +9,7 @@ enum cmdtype {
struct cmd {
enum cmdtype type;
char *selector;
- char *params;
+ char **params;
};
struct cmd eval(char *str);
diff --git a/src/main.c b/src/main.c
index 90d7879..deec7f3 100644
--- a/src/main.c
+++ b/src/main.c
@@ -33,9 +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]);
+ }
+ free(evaled.params);
free(evaled.selector);
}
-
free(cmd);
writedb(filename, list);
for (int i = 0; i < list[0].len; ++i) {