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];
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);