*** 3000shell.c 2021-01-22 00:57:39.000000000 -0500 --- 3000shell-cd.c 2025-02-22 16:07:48.200586245 -0500 *************** *** 28,33 **** --- 28,35 ---- const char *proc_prefix = "/proc"; + char *pwd; + void parse_args(char *buffer, char** args, size_t args_size, size_t *nargs) { *************** *** 187,192 **** --- 189,204 ---- } } + void cd(char *dir) + { + char pname[4096]; + if (NULL == dir) + dir = getenv("HOME"); + + if (chdir(dir) || getcwd(pname, 4096) == NULL || setenv("PWD", pname, 1)) + printf("Error entering directory %s\n", dir); + } + void signal_handler(int the_signal) { int pid, status; *************** *** 261,267 **** char *stdout_fn; while(1){ ! printf("%s $ ", username); s = fgets(buffer, BUFFER_SIZE, stdin); if (s == NULL) { --- 273,281 ---- char *stdout_fn; while(1){ ! pwd = getenv("PWD"); ! ! printf("%s:%s $ ", username, pwd); s = fgets(buffer, BUFFER_SIZE, stdin); if (s == NULL) { *************** *** 283,288 **** --- 297,307 ---- continue; } + if (!strcmp(args[0], "cd")) { + cd(args[1]); + continue; + } + background = 0; if (strcmp(args[nargs-1], "&") == 0) { background = 1;