summaryrefslogtreecommitdiffstats
path: root/job.c
diff options
context:
space:
mode:
authorThomas Adam <thomas@xteddy.org>2015-10-31 10:01:12 +0000
committerThomas Adam <thomas@xteddy.org>2015-10-31 10:01:12 +0000
commit17f6c3be8eeb0b67d07f916026dab918795c0317 (patch)
tree08a10a780a8de977d4452c10a7a9c03db1ae1702 /job.c
parente8bb385d6d9d8a91b5fa78e906531afc02320b80 (diff)
parent01defc9f4965bb174e1d1295754d5a8695683054 (diff)
Merge branch 'obsd-master'
Diffstat (limited to 'job.c')
-rw-r--r--job.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/job.c b/job.c
index 47274db1..191d0a0f 100644
--- a/job.c
+++ b/job.c
@@ -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);