mirror of
https://github.com/tmate-io/tmate.git
synced 2025-08-19 17:55:48 +02:00
Sync OpenBSD patchset 231:
Infrastructure and commands to manage the environment for processes started within tmux. There is a global environment, copied from the external environment when the server is started and each session has an (initially empty) session environment which overrides it. New commands set-environment and show-environment manipulate or display the environments. A new session option, update-environment, is a space-separated list of variables which are updated from the external environment into the session environment every time a new session is created - the default is DISPLAY.
This commit is contained in:
30
cmd-string.c
30
cmd-string.c
@@ -1,4 +1,4 @@
|
||||
/* $Id: cmd-string.c,v 1.22 2009-08-09 15:26:24 tcunha Exp $ */
|
||||
/* $Id: cmd-string.c,v 1.23 2009-08-09 17:48:55 tcunha Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
|
||||
@@ -59,21 +59,11 @@ int
|
||||
cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause)
|
||||
{
|
||||
size_t p;
|
||||
int ch, argc, rval, have_arg;
|
||||
char **argv, *buf, *t, *u;
|
||||
int ch, i, argc, rval, have_arg;
|
||||
char **argv, *buf, *t;
|
||||
const char *whitespace, *equals;
|
||||
size_t len;
|
||||
|
||||
if ((t = strchr(s, ' ')) == NULL && (t = strchr(s, '\t')) == NULL)
|
||||
t = strchr(s, '\0');
|
||||
if ((u = strchr(s, '=')) != NULL && u < t) {
|
||||
if (putenv(xstrdup(s)) != 0) {
|
||||
xasprintf(cause, "assignment failed: %s", s);
|
||||
return (-1);
|
||||
}
|
||||
*cmdlist = NULL;
|
||||
return (0);
|
||||
}
|
||||
|
||||
argv = NULL;
|
||||
argc = 0;
|
||||
|
||||
@@ -147,6 +137,18 @@ cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause)
|
||||
if (argc == 0)
|
||||
goto out;
|
||||
|
||||
for (i = 0; i < argc; i++) {
|
||||
equals = strchr(argv[i], '=');
|
||||
whitespace = argv[i] + strcspn(argv[i], " \t");
|
||||
if (equals == NULL || equals > whitespace)
|
||||
break;
|
||||
environ_put(&global_environ, argv[i]);
|
||||
memmove(&argv[i], &argv[i + 1], argc - i - 1);
|
||||
argc--;
|
||||
}
|
||||
if (argc == 0)
|
||||
goto out;
|
||||
|
||||
*cmdlist = cmd_list_parse(argc, argv, cause);
|
||||
if (*cmdlist == NULL)
|
||||
goto out;
|
||||
|
Reference in New Issue
Block a user