fixing cd issues
This commit is contained in:
19
cmd/dfs.c
19
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);
|
||||
|
||||
Reference in New Issue
Block a user