=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/Attic/cmd-string.c,v retrieving revision 1.5 retrieving revision 1.6 diff -c -r1.5 -r1.6 *** src/usr.bin/tmux/Attic/cmd-string.c 2009/08/03 14:10:54 1.5 --- src/usr.bin/tmux/Attic/cmd-string.c 2009/08/08 21:52:43 1.6 *************** *** 1,4 **** ! /* $OpenBSD: cmd-string.c,v 1.5 2009/08/03 14:10:54 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott --- 1,4 ---- ! /* $OpenBSD: cmd-string.c,v 1.6 2009/08/08 21:52:43 nicm Exp $ */ /* * Copyright (c) 2008 Nicholas Marriott *************** *** 59,79 **** 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; 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; --- 59,69 ---- cmd_string_parse(const char *s, struct cmd_list **cmdlist, char **cause) { size_t p; ! int ch, i, argc, rval, have_arg; ! char **argv, *buf, *t; ! const char *whitespace, *equals; size_t len; argv = NULL; argc = 0; *************** *** 144,149 **** --- 134,151 ---- if (ch != EOF) break; + 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;