fixing cd issues

This commit is contained in:
Pin
2023-03-05 20:37:30 -05:00
parent 98c04215a6
commit af294cd978

View File

@@ -59,27 +59,34 @@ int builtinCD(char **dir) {
char c = *dir[1]; char c = *dir[1];
switch (c) { switch (c) {
case '~': case '~':
changeDir = realloc(changeDir, strlen(getenv("HOME") + strlen(dir[1]))); changeDir = realloc(changeDir, strlen(getenv("HOME")) + strlen(dir[1]) + 1);
strcpy(changeDir, getenv("HOME")); strcpy(changeDir, getenv("HOME"));
strcat(changeDir, dir[1]+1); strcat(changeDir, dir[1]+1);
break; break;
case '-': 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")); strcpy(changeDir, getenv("OLDPWD"));
break; break;
default: default:
changeDir = dir[1]; changeDir = realloc(changeDir, strlen(dir[1]) + 1);
strcpy(changeDir, dir[1]);
break; break;
} }
if (chdir(changeDir) != 0) { if (chdir(changeDir) != 0) {
status = 1; status = 1;
printf("bash: cd: error\n"); printf("bash: cd: error\n");
} else { } else {
setenv("PWD", dir[1], 1); setenv("PWD", dir[1], 1);
setenv("OLDPWD", oldPWD, 1); setenv("OLDPWD", oldPWD, 1);
free(prompt);
prompt = NULL;
} }
} else { } else {
if (chdir(getenv("HOME")) != 0) { if (chdir(getenv("HOME")) != 0) {
status = 1; status = 1;
@@ -87,8 +94,6 @@ int builtinCD(char **dir) {
} else { } else {
setenv("PWD", getenv("HOME"), 1); setenv("PWD", getenv("HOME"), 1);
setenv("OLDPWD", oldPWD, 1); setenv("OLDPWD", oldPWD, 1);
free(prompt);
prompt = NULL;
} }
} }
free(changeDir); free(changeDir);