diff --git a/include/commands.h b/include/commands.h index 0afab8b78962ddae6d1e74b1c6561fd533965732..20e9287ca88a7f3cc986b78d1ff4736d7b7c75d1 100644 --- a/include/commands.h +++ b/include/commands.h @@ -1,6 +1,12 @@ #ifndef MYSH_COMMANDS_H_ #define MYSH_COMMANDS_H_ +struct single_command +{ + int argc; + char** argv; +}; + /** do_cd(argc, argv) diff --git a/include/utils.h b/include/utils.h index a84b441cdf2d4b14b2463dad22055dec0165f270..6076d973189b24c1c8f916dd70b324acce9ff5c8 100644 --- a/include/utils.h +++ b/include/utils.h @@ -1,7 +1,13 @@ #ifndef MYSH_UTILS_H_ #define MYSH_UTILS_H_ +#include "commands.h" + void mysh_parse_command(const char* command, - int *argc, char*** argv); + int* n_commands, + struct single_command** commands); + +void parse_single_command(const char* command, + int *argc, char*** argv); #endif // MYSH_UTILS_H_ diff --git a/src/utils.c b/src/utils.c index 1785ed8e1838a79eb205328214787b7f90b3911f..1d1ad39d55729a9abda7cd82d26ce69f416aa9f0 100644 --- a/src/utils.c +++ b/src/utils.c @@ -4,15 +4,37 @@ #include <string.h> void mysh_parse_command(const char* command, - int *argc, char*** argv) + int* n_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); + + char *saveptr = NULL; + char *tok = strtok_r(buf, "|", &saveptr); + + int ti = 0; + + while (tok != NULL) { + } + + *n_commands = ti; +} + +void parse_single_command(const char* command, + int *argc, char*** argv) { const int kMaxArgc = 512; - *argv = (char**)malloc(kMaxArgc); + *argv = (char**)malloc(kMaxArgc * sizeof(char*)); char buf[4096]; strcpy(buf, command); - char *tok = strtok(buf, " \n\t"); + char *saveptr = NULL; + char *tok = strtok_r(buf, " \n\t", &saveptr); int ti = 0; @@ -22,7 +44,7 @@ void mysh_parse_command(const char* command, ++ti; - tok = strtok(NULL, " \n\t"); + tok = strtok_r(NULL, " \n\t", &saveptr); } *argc = ti;