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