diff --git a/contrib/chg/hgclient.c b/contrib/chg/hgclient.c --- a/contrib/chg/hgclient.c +++ b/contrib/chg/hgclient.c @@ -252,7 +252,7 @@ static void handlesystemrequest(hgclient ctx->datasize = sizeof(r_n); writeblock(hgc); } else if (strcmp(args[0], "pager") == 0) { - setuppager(args[1]); + setuppager(args[1], args + 3); if (hgc->capflags & CAP_ATTACHIO) attachio(hgc); /* unblock the server */ diff --git a/contrib/chg/procutil.c b/contrib/chg/procutil.c --- a/contrib/chg/procutil.c +++ b/contrib/chg/procutil.c @@ -177,7 +177,7 @@ error: /* This implementation is based on hgext/pager.py (post 369741ef7253) * Return 0 if pager is not started, or pid of the pager */ -pid_t setuppager(const char *pagercmd) +pid_t setuppager(const char *pagercmd, const char *envp[]) { assert(pagerpid == 0); if (!pagercmd) @@ -205,7 +205,8 @@ pid_t setuppager(const char *pagercmd) close(pipefds[0]); close(pipefds[1]); - int r = execlp("/bin/sh", "/bin/sh", "-c", pagercmd, NULL); + int r = execle("/bin/sh", "/bin/sh", "-c", pagercmd, NULL, + envp); if (r < 0) { abortmsgerrno("cannot start pager '%s'", pagercmd); } diff --git a/contrib/chg/procutil.h b/contrib/chg/procutil.h --- a/contrib/chg/procutil.h +++ b/contrib/chg/procutil.h @@ -15,7 +15,7 @@ void restoresignalhandler(void); void setupsignalhandler(pid_t pid, pid_t pgid); -pid_t setuppager(const char *pagercmd); +pid_t setuppager(const char *pagercmd, const char *envp[]); void waitpager(void); #endif /* PROCUTIL_H_ */