diff --git a/include/utils.h b/include/utils.h index 6076d973189b24c1c8f916dd70b324acce9ff5c8..5f3403dd0226dca7e5f1b06d6b0193e2b1caf43d 100644 --- a/include/utils.h +++ b/include/utils.h @@ -5,7 +5,7 @@ void mysh_parse_command(const char* command, int* n_commands, - struct single_command** commands); + struct single_command (*commands)[]); void parse_single_command(const char* command, int *argc, char*** argv); diff --git a/src/main.c b/src/main.c index efb87c30eda6b91c0e8743848cbae1fb509b454f..fd6bffa371b96ab446b0f2b753fd9e00ffbcb34d 100644 --- a/src/main.c +++ b/src/main.c @@ -10,13 +10,25 @@ static void release_argv(int argc, char*** argv); int main() { char buf[8096]; - int argc; - char** argv; while (1) { fgets(buf, 8096, stdin); - mysh_parse_command(buf, &argc, &argv); + struct single_command commands[512]; + int n_commands = 0; + mysh_parse_command(buf, &n_commands, &commands); + + for (int i = 0; i < n_commands; ++i) { + struct single_command* com = commands + i; + int argc = com->argc; + char** argv = com->argv; + for (int j = 0; j < argc; ++j) { + printf("%s ", argv[j]); + } + printf("\n"); + } + + /* if (strcmp(argv[0], "") == 0) { goto release_and_continue; @@ -39,6 +51,7 @@ release_and_continue: release_and_exit: release_argv(argc, &argv); break; + */ } return 0; diff --git a/src/utils.c b/src/utils.c index 1d1ad39d55729a9abda7cd82d26ce69f416aa9f0..fe4d51e983b86609de58bd8986557e429b1dd8e0 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1,15 +1,13 @@ #include "utils.h" +#define _GNU_SOURCE #include <stdlib.h> #include <string.h> void mysh_parse_command(const char* command, int* n_commands, - struct single_command** commands) + struct single_command (*commands)[]) { - const int kMaxPipes = 512; - *commands = (struct single_command*)malloc(sizeof(struct single_command) * kMaxPipes); - char buf[4096]; strcpy(buf, command); @@ -19,6 +17,12 @@ void mysh_parse_command(const char* command, int ti = 0; while (tok != NULL) { + struct single_command* com = *commands + ti; + parse_single_command(tok, &com->argc, &com->argv); + + ++ti; + + tok = strtok_r(buf, "|", &saveptr); } *n_commands = ti;