summaryrefslogtreecommitdiffstats
path: root/tmux.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2013-10-05 09:14:11 +0100
committerNicholas Marriott <nicholas.marriott@gmail.com>2013-10-05 09:14:11 +0100
commitd51b4f92d7c9899694e9ef8334030ceb512cb2de (patch)
treea7e64cc845642381b99a8b36dc8fbdc2b77461a0 /tmux.c
parent13360ad54157790cbbaab757f659cb6d8a4ce2c4 (diff)
Use open(".")/fchdir() to save and restore current directory rather than
getcwd()/chdir().
Diffstat (limited to 'tmux.c')
-rw-r--r--tmux.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/tmux.c b/tmux.c
index 9c81cff5..4ff45d55 100644
--- a/tmux.c
+++ b/tmux.c
@@ -127,19 +127,25 @@ areshell(const char *shell)
return (0);
}
-const char*
+const char *
get_full_path(const char *wd, const char *path)
{
+ int fd;
static char newpath[MAXPATHLEN];
- char oldpath[MAXPATHLEN];
- if (getcwd(oldpath, sizeof oldpath) == NULL)
+ fd = open(".", O_RDONLY);
+ if (fd == -1)
return (NULL);
+
if (chdir(wd) != 0)
return (NULL);
if (realpath(path, newpath) != 0)
return (NULL);
- chdir(oldpath);
+
+ if (fchdir(fd) != 0)
+ chdir("/");
+ close(fd);
+
return (newpath);
}