X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=unix%2Fuxpty.c;h=39f96f126afd9a347f3c46caf2bd7c8fed914015;hb=095072fa46b2d7b8beafaddb2f873d2f500a1e10;hp=e96ff3568e7abe89a3cae137c7e0844fab23f8e1;hpb=eac66b0281f30be97094fe94174e65477b018812;p=PuTTY.git diff --git a/unix/uxpty.c b/unix/uxpty.c index e96ff356..39f96f12 100644 --- a/unix/uxpty.c +++ b/unix/uxpty.c @@ -180,6 +180,8 @@ static struct utmpx utmp_entry; */ char **pty_argv; +char *pty_osx_envrestore_prefix; + static void pty_close(Pty pty); static void pty_try_write(Pty pty); @@ -809,6 +811,34 @@ static const char *pty_init(void *frontend, void **backend_handle, Conf *conf, * We are the child. */ + if (pty_osx_envrestore_prefix) { + int plen = strlen(pty_osx_envrestore_prefix); + extern char **environ; + char **ep; + + restart_osx_env_restore: + for (ep = environ; *ep; ep++) { + char *e = *ep; + + if (!strncmp(e, pty_osx_envrestore_prefix, plen)) { + int unset = (e[plen] == 'u'); + char *pname = dupprintf("%.*s", (int)strcspn(e, "="), e); + char *name = pname + plen + 1; + char *value = e + strcspn(e, "="); + if (*value) value++; + value = dupstr(value); + if (unset) + unsetenv(name); + else + setenv(name, value, 1); + unsetenv(pname); + sfree(pname); + sfree(value); + goto restart_osx_env_restore; + } + } + } + slavefd = pty_open_slave(pty); if (slavefd < 0) { perror("slave pty: open");