diff --git a/main.c b/main.c index 49edf63..e040dcd 100644 --- a/main.c +++ b/main.c @@ -3,6 +3,8 @@ #include #include #include +#include +#include int handleBuiltins(char **args) { if(strcmp(args[0], "cd") == 0) { chdir(args[1] == NULL ? getenv("HOME") : args[1]); @@ -25,20 +27,20 @@ char **parse(char *line) { return args; } int main() { - char line[1024]; while(1) { char *user = getenv("USER"); char dir[1024]; getcwd(dir, sizeof(dir)); char host[1024]; gethostname(host, sizeof(host)); - printf("%s@%s %s$", user, host, dir); - fflush(stdout); - char *result = fgets(line, sizeof(line), stdin); - if(result == NULL) return 0; + char prompt[2048]; + snprintf(prompt, sizeof(prompt), "%s@%s %s$ ", user, host, dir); + char *line = readline(prompt); + if(line == NULL) return 0; + if(line && *line) add_history(line); char **parsed = parse(line); - if(parsed[0] == NULL) { free(parsed); continue; } - if(handleBuiltins(parsed)) { free(parsed); continue; } + if(parsed[0] == NULL) { free(parsed); free(line); continue; } + if(handleBuiltins(parsed)) { free(line); free(parsed); continue; } pid_t pid = fork(); if(pid == 0) { if(execvp(parsed[0], parsed) == -1 ) { @@ -49,6 +51,7 @@ int main() { wait(NULL); } free(parsed); + free(line); } }