Use open(".")/fchdir() to save and restore current directory rather than

getcwd()/chdir().
This commit is contained in:
Nicholas Marriott 2013-10-05 09:14:11 +01:00
parent 13360ad541
commit d51b4f92d7
2 changed files with 11 additions and 5 deletions

View File

@ -135,7 +135,7 @@ error:
return (NULL); return (NULL);
} }
char* char *
osdep_get_cwd(int fd) osdep_get_cwd(int fd)
{ {
int name[] = { CTL_KERN, KERN_PROC_CWD, 0 }; int name[] = { CTL_KERN, KERN_PROC_CWD, 0 };

14
tmux.c
View File

@ -127,19 +127,25 @@ areshell(const char *shell)
return (0); return (0);
} }
const char* const char *
get_full_path(const char *wd, const char *path) get_full_path(const char *wd, const char *path)
{ {
int fd;
static char newpath[MAXPATHLEN]; static char newpath[MAXPATHLEN];
char oldpath[MAXPATHLEN];
if (getcwd(oldpath, sizeof oldpath) == NULL) fd = open(".", O_RDONLY);
if (fd == -1)
return (NULL); return (NULL);
if (chdir(wd) != 0) if (chdir(wd) != 0)
return (NULL); return (NULL);
if (realpath(path, newpath) != 0) if (realpath(path, newpath) != 0)
return (NULL); return (NULL);
chdir(oldpath);
if (fchdir(fd) != 0)
chdir("/");
close(fd);
return (newpath); return (newpath);
} }