diff options
author | Thomas Adam <thomas@xteddy.org> | 2015-10-31 10:01:12 +0000 |
---|---|---|
committer | Thomas Adam <thomas@xteddy.org> | 2015-10-31 10:01:12 +0000 |
commit | 17f6c3be8eeb0b67d07f916026dab918795c0317 (patch) | |
tree | 08a10a780a8de977d4452c10a7a9c03db1ae1702 /job.c | |
parent | e8bb385d6d9d8a91b5fa78e906531afc02320b80 (diff) | |
parent | 01defc9f4965bb174e1d1295754d5a8695683054 (diff) |
Merge branch 'obsd-master'
Diffstat (limited to 'job.c')
-rw-r--r-- | job.c | 9 |
1 files changed, 6 insertions, 3 deletions
@@ -40,13 +40,14 @@ struct joblist all_jobs = LIST_HEAD_INITIALIZER(all_jobs); /* Start a job running, if it isn't already. */ struct job * -job_run(const char *cmd, struct session *s, int cwd, +job_run(const char *cmd, struct session *s, const char *cwd, void (*callbackfn)(struct job *), void (*freefn)(void *), void *data) { struct job *job; struct environ *env; pid_t pid; int nullfd, out[2]; + const char *home; if (socketpair(AF_UNIX, SOCK_STREAM, PF_UNSPEC, out) != 0) return (NULL); @@ -66,8 +67,10 @@ job_run(const char *cmd, struct session *s, int cwd, case 0: /* child */ clear_signals(1); - if (cwd != -1 && fchdir(cwd) != 0) - chdir("/"); + if (cwd == NULL || chdir(cwd) != 0) { + if ((home = find_home()) == NULL || chdir(home) != 0) + chdir("/"); + } environ_push(env); environ_free(env); |