summaryrefslogtreecommitdiffstats
path: root/02_exercise/shell.c
diff options
context:
space:
mode:
authorStefan Zabka <zabkaste@hu-berlin.de>2020-05-24 12:09:46 +0200
committerStefan Zabka <zabkaste@hu-berlin.de>2020-05-24 12:09:46 +0200
commit65966ded0cc15c5966c6568cf0ff2f2bbe1fc29a (patch)
tree60af69be16926ef0f24ad2a954d9205ce9277450 /02_exercise/shell.c
parent3b7e61eab8ce5d230bc1b172942c1ab9459ed161 (diff)
downloadbetriebssysteme-65966ded0cc15c5966c6568cf0ff2f2bbe1fc29a.tar.gz
betriebssysteme-65966ded0cc15c5966c6568cf0ff2f2bbe1fc29a.zip
Big remodelling
Diffstat (limited to '02_exercise/shell.c')
-rw-r--r--02_exercise/shell.c76
1 files changed, 0 insertions, 76 deletions
diff --git a/02_exercise/shell.c b/02_exercise/shell.c
deleted file mode 100644
index f456465..0000000
--- a/02_exercise/shell.c
+++ /dev/null
@@ -1,76 +0,0 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdbool.h>
-
-#include "array.h"
-#include "process.h"
-#include "prompt_utils.h"
-
-
-int main(void) {
- chdir(".");
- setvbuf(stdout, NULL, _IONBF, 0);
-
- char const *const original_wd = get_current_dir_name();
- char const *prompt = relative_path(original_wd, original_wd);
- bool done = false;
- while (!done) {
- char *line = NULL;
- size_t cap = 0;
- __ssize_t length = 0;
-
- printf("%s > ", prompt);
- if ((length = getline(&line, &cap, stdin)) < 0) {
- fprintf(stderr, "Failed to read from STDIN");
- exit(-1);
- }
-
- if (strspn(line, " \n\t") == strlen(line)) {
- continue;
- }
-
- line[length - 1] = '\0'; // cut the line feed
-
- Process * processes = NULL;
- parse_line(line, &processes);
-
- if (strcmp(processes[0].argv[0], "cd") == 0) {
-
- if(arrayLen(processes) != 1) {
- perror("Can't chain cd with other processes");
- }
- if (arrayLen(processes[0].argv) != 3) {
- fprintf(stderr, "usage: cd <path>");
- goto clean;
- }
-
- int ret = chdir(processes[0].argv[1]);
- if (ret)
- printf("[%i] ", ret);
-
- free((void *)prompt);
- char const *current_wd = get_current_dir_name();
- prompt = relative_path(original_wd, current_wd);
- free((void *)current_wd);
- } else if (strcmp(processes[0].argv[0], "exit") == 0) {
- done = true;
- } else {
- int ret;
- for (size_t i = 0; i < arrayLen(processes); ++i) {
- ret = exec_command(processes[i]);
- if (ret)
- printf("[%i] ", ret);
- }
-
- }
-
- clean:
- free((void *)line);
- free_processes(&processes);
- }
-
- free((void *)original_wd);
- free((void *)prompt);
-}