mirror of
https://github.com/RGBCube/serenity
synced 2025-05-24 06:05:08 +00:00
Shell: Remember previous working dir
...and allow switching back to it with `cd -` Partially addresses #397
This commit is contained in:
parent
ad75b61eca
commit
093961d2d9
1 changed files with 11 additions and 2 deletions
|
@ -83,11 +83,17 @@ static int sh_cd(int argc, char** argv)
|
||||||
if (argc == 1) {
|
if (argc == 1) {
|
||||||
strcpy(pathbuf, g.home.characters());
|
strcpy(pathbuf, g.home.characters());
|
||||||
} else {
|
} else {
|
||||||
if (argv[1][0] == '/')
|
if (strcmp(argv[1], "-") == 0) {
|
||||||
|
char* oldpwd = getenv("OLDPWD");
|
||||||
|
size_t len = strlen(oldpwd);
|
||||||
|
ASSERT(len + 1 <= PATH_MAX);
|
||||||
|
memcpy(pathbuf, oldpwd, len + 1);
|
||||||
|
} else if (argv[1][0] == '/') {
|
||||||
memcpy(pathbuf, argv[1], strlen(argv[1]) + 1);
|
memcpy(pathbuf, argv[1], strlen(argv[1]) + 1);
|
||||||
else
|
} else {
|
||||||
sprintf(pathbuf, "%s/%s", g.cwd.characters(), argv[1]);
|
sprintf(pathbuf, "%s/%s", g.cwd.characters(), argv[1]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
FileSystemPath canonical_path(pathbuf);
|
FileSystemPath canonical_path(pathbuf);
|
||||||
if (!canonical_path.is_valid()) {
|
if (!canonical_path.is_valid()) {
|
||||||
|
@ -111,7 +117,9 @@ static int sh_cd(int argc, char** argv)
|
||||||
printf("chdir(%s) failed: %s\n", path, strerror(errno));
|
printf("chdir(%s) failed: %s\n", path, strerror(errno));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
setenv("OLDPWD", g.cwd.characters(), 1);
|
||||||
g.cwd = canonical_path.string();
|
g.cwd = canonical_path.string();
|
||||||
|
setenv("PWD", g.cwd.characters(), 1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,6 +643,7 @@ int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
auto* cwd = getcwd(nullptr, 0);
|
auto* cwd = getcwd(nullptr, 0);
|
||||||
g.cwd = cwd;
|
g.cwd = cwd;
|
||||||
|
setenv("PWD", cwd, 1);
|
||||||
free(cwd);
|
free(cwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue