From d3ab5dad5ed7438d9d59fa4e113778be8bec6e3b Mon Sep 17 00:00:00 2001 From: Jaewon Choi <jaewon.james.choi@gmail.com> Date: Sun, 15 Oct 2017 14:08:06 +0900 Subject: [PATCH] WIP: Support single_command for pipe --- include/commands.h | 6 ++++++ include/utils.h | 8 +++++++- src/utils.c | 30 ++++++++++++++++++++++++++---- 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/include/commands.h b/include/commands.h index 0afab8b..20e9287 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 a84b441..6076d97 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 1785ed8..1d1ad39 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; -- GitLab