From af294cd9783203fc80e2c0e77fd3d37ba20da145 Mon Sep 17 00:00:00 2001 From: Pin Date: Sun, 5 Mar 2023 20:37:30 -0500 Subject: [PATCH] fixing cd issues --- cmd/dfs.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/cmd/dfs.c b/cmd/dfs.c index 1935be7..91555de 100644 --- a/cmd/dfs.c +++ b/cmd/dfs.c @@ -59,27 +59,34 @@ int builtinCD(char **dir) { char c = *dir[1]; switch (c) { case '~': - changeDir = realloc(changeDir, strlen(getenv("HOME") + strlen(dir[1]))); + changeDir = realloc(changeDir, strlen(getenv("HOME")) + strlen(dir[1]) + 1); strcpy(changeDir, getenv("HOME")); strcat(changeDir, dir[1]+1); break; case '-': - changeDir = realloc(changeDir, strlen(getenv("OLDPWD"))); + // Break early when OLDPWD is not set + if (getenv("OLDPWD") == NULL) { + free(changeDir); + printf("bash: cd: OLDPWD not set\n"); + return 1; + } + changeDir = realloc(changeDir, strlen(getenv("OLDPWD")) + 1); strcpy(changeDir, getenv("OLDPWD")); break; default: - changeDir = dir[1]; + changeDir = realloc(changeDir, strlen(dir[1]) + 1); + strcpy(changeDir, dir[1]); break; } + if (chdir(changeDir) != 0) { status = 1; printf("bash: cd: error\n"); } else { setenv("PWD", dir[1], 1); setenv("OLDPWD", oldPWD, 1); - free(prompt); - prompt = NULL; } + } else { if (chdir(getenv("HOME")) != 0) { status = 1; @@ -87,8 +94,6 @@ int builtinCD(char **dir) { } else { setenv("PWD", getenv("HOME"), 1); setenv("OLDPWD", oldPWD, 1); - free(prompt); - prompt = NULL; } } free(changeDir);