diff options
Diffstat (limited to '03_exercise/srv')
-rwxr-xr-x | 03_exercise/srv/server | bin | 58760 -> 58856 bytes | |||
-rw-r--r-- | 03_exercise/srv/shell.c | 18 |
2 files changed, 11 insertions, 7 deletions
diff --git a/03_exercise/srv/server b/03_exercise/srv/server Binary files differindex 232330a..efe2660 100755 --- a/03_exercise/srv/server +++ b/03_exercise/srv/server diff --git a/03_exercise/srv/shell.c b/03_exercise/srv/shell.c index a32fc5f..74586c7 100644 --- a/03_exercise/srv/shell.c +++ b/03_exercise/srv/shell.c @@ -11,7 +11,7 @@ #include "prompt_utils.h" #include "builtins.h" -#define BUF_SIZE 256 +#define BUF_SIZE 2048 process *processes; @@ -55,19 +55,19 @@ int shell(int in_fd) { bool done = false; while (!done) { char line[BUF_SIZE]; + __ssize_t length; - for (int i = 0; i < BUF_SIZE; ++i) { - read(in_fd, line + i, 1); - if (line[i] == '\n') { - line[i] = 0; - break; - } + if ((length = read(in_fd, line, BUF_SIZE)) < 0) { + fprintf(stderr, "Failed to read from STDIN"); + fflush(stderr); + exit(-1); } if (strspn(line, " \n\t") == strlen(line)) { // skip empty lines - empty being just spaces or tabs continue; } + line[length - 1] = '\0'; // cut the line feed processes = NULL; parse_line(line, &processes); @@ -92,6 +92,8 @@ int shell(int in_fd) { if (ret) printf("[%i] ", ret); + else + printf("%s\n", get_current_dir_name()); } else if (strcmp(processes[0].argv[0], "exit") == 0) { done = true; @@ -115,6 +117,8 @@ int shell(int in_fd) { free_processes(&processes); } + printf("Disconnecting..."); + free((void *) original_wd); return 0; |