summaryrefslogtreecommitdiffstats
path: root/02_exercise/shell.c
diff options
context:
space:
mode:
Diffstat (limited to '02_exercise/shell.c')
-rw-r--r--02_exercise/shell.c38
1 files changed, 34 insertions, 4 deletions
diff --git a/02_exercise/shell.c b/02_exercise/shell.c
index 0cea1f6..88b17fd 100644
--- a/02_exercise/shell.c
+++ b/02_exercise/shell.c
@@ -1,16 +1,46 @@
-#include <stdio.h>
+#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <fcntl.h>
#include <signal.h>
+#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
-#include <sys/stat.h>
+#include <unistd.h>
#include "array.h"
+#include "stdbool.h"
+
+void print_prompt(char const *const original_wd, char const *current_wd);
int main(void) {
- return 0;
+
+ char const *const original_wd = get_current_dir_name();
+ char const *current_wd = get_current_dir_name();
+
+ while (true) {
+ char *command = NULL;
+ size_t cap = 0;
+ size_t length = 0;
+ print_prompt(original_wd, current_wd);
+ if ((length = getline(&command, &cap, stdin)) < 0) {
+ fprintf(stderr, "Failed to read from STDIN");
+ }
+ if (strcmp(command, "exit\n") == 0) {
+ exit(0);
+ }
+ free((void *)command);
+ }
+ // Gotta cast to void otherwise we discard qualifiers
+ free((void *)original_wd);
+ free((void *)current_wd);
}
+
+void print_prompt(char const *const original_wd, char const *current_wd) {
+
+ int result = strcmp(original_wd, current_wd);
+ if (result == 0) {
+ printf("./ > ");
+ }
+} \ No newline at end of file