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];
|
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user