From 482c8cdc94486bff5679e6cf240a1ac7b1d9107a Mon Sep 17 00:00:00 2001 From: Jaewon Choi <jaewon.james.choi@gmail.com> Date: Sun, 17 Sep 2017 00:22:05 +0900 Subject: [PATCH] Ready to implement cd and pwd commands --- Makefile | 2 +- include/commands.h | 10 ++++++++ src/commands.c | 28 +++++++++++++++++++++ src/main.c | 41 +++++++++++++++++++++++++++++++ tests/src/command_parsing_test.cc | 2 +- 5 files changed, 81 insertions(+), 2 deletions(-) create mode 100644 include/commands.h create mode 100644 src/commands.c diff --git a/Makefile b/Makefile index a2d5da9..fddb9c1 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ CC=gcc -std=c99 CFLAGS=-I./src -I./include LIB= -OBJ=./src/utils.o +OBJ=./src/utils.o ./src/commands.o %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) diff --git a/include/commands.h b/include/commands.h new file mode 100644 index 0000000..cef8739 --- /dev/null +++ b/include/commands.h @@ -0,0 +1,10 @@ +#ifndef MYSH_COMMANDS_H_ +#define MYSH_COMMANDS_H_ + +int do_cd(int argc, char** argv); +int do_pwd(int argc, char** argv); + +int validate_cd_argv(int argc, char** argv); +int validate_pwd_argv(int argc, char** argv); + +#endif // MYSH_COMMANDS_H_ diff --git a/src/commands.c b/src/commands.c new file mode 100644 index 0000000..2df0d4d --- /dev/null +++ b/src/commands.c @@ -0,0 +1,28 @@ +#include <string.h> + +#include "commands.h" + +int do_cd(int argc, char** argv) { + if (!validate_cd_argv(argc, argv)) + return -1; + + // TODO: Fill it! + return 0; +} + +int do_pwd(int argc, char** argv) { + if (!validate_pwd_argv(argc, argv)) + return -1; + + // TODO: Fill it! + + return 0; +} + +int validate_cd_argv(int argc, char** argv) { + // TODO: Fill it! +} + +int validate_pwd_argv(int argc, char** argv) { + // TODO: Fill it! +} diff --git a/src/main.c b/src/main.c index f8b643a..27a83e0 100644 --- a/src/main.c +++ b/src/main.c @@ -1,4 +1,45 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include "commands.h" +#include "utils.h" + int main() { + char buf[8096]; + int argc; + char** argv; + + // initialize command buffer + argv = (char**)malloc(32); + for (int i = 0; i < 32; ++i) { + argv[i] = (char*)malloc(8096); + } + + while (1) { + fgets(buf, 8096, stdin); + + mysh_parse_command(buf, &argc, argv); + + if (strcmp(buf, "") == 0) { + continue; + } else if (strcmp(argv[0], "cd") == 0) { + do_cd(argc, argv); + } else if (strcmp(argv[0], "pwd") == 0) { + do_pwd(argc, argv); + } else if (strcmp(argv[0], "exit") == 0) { + break; + } else { + fprintf(stderr, "%s: command not found\n", argv[0]); + } + } + + // destroy command buffer + for (int i = 0; i < 32; ++i) { + free(argv[i]); + } + free(argv); + return 0; } diff --git a/tests/src/command_parsing_test.cc b/tests/src/command_parsing_test.cc index 65925de..19165c1 100644 --- a/tests/src/command_parsing_test.cc +++ b/tests/src/command_parsing_test.cc @@ -84,7 +84,7 @@ TEST(CommandParsingTest, EmptyCommand) { char** argv = alloc_string_array(1, 1024); int argc = -1; - mysh_parse_command("", &argc, argv); + mysh_parse_command(" \n \t ", &argc, argv); EXPECT_EQ(argc, 1); EXPECT_STREQ(argv[0], ""); -- GitLab