summaryrefslogtreecommitdiff
path: root/usr.bin
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@cvs.openbsd.org>2022-08-15 08:37:04 +0000
committerNicholas Marriott <nicm@cvs.openbsd.org>2022-08-15 08:37:04 +0000
commitf4ab265f13a9bcbcaff0269aa01278a970064eae (patch)
tree0ad92856f9c80b49f6aea3ed129ae74860284dcb /usr.bin
parent1ab0837bd133d2ef84edcdcb6d494373fd2f0c5c (diff)
Don't stop at first match when updating environment.
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/tmux/environ.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/usr.bin/tmux/environ.c b/usr.bin/tmux/environ.c
index 36f5a821fbb..f1a9be3c742 100644
--- a/usr.bin/tmux/environ.c
+++ b/usr.bin/tmux/environ.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: environ.c,v 1.26 2020/10/07 08:23:55 nicm Exp $ */
+/* $OpenBSD: environ.c,v 1.27 2022/08/15 08:37:03 nicm Exp $ */
/*
* Copyright (c) 2009 Nicholas Marriott <nicholas.marriott@gmail.com>
@@ -182,9 +182,11 @@ void
environ_update(struct options *oo, struct environ *src, struct environ *dst)
{
struct environ_entry *envent;
+ struct environ_entry *envent1;
struct options_entry *o;
struct options_array_item *a;
union options_value *ov;
+ int found;
o = options_get(oo, "update-environment");
if (o == NULL)
@@ -192,14 +194,15 @@ environ_update(struct options *oo, struct environ *src, struct environ *dst)
a = options_array_first(o);
while (a != NULL) {
ov = options_array_item_value(a);
- RB_FOREACH(envent, environ, src) {
- if (fnmatch(ov->string, envent->name, 0) == 0)
- break;
+ found = 0;
+ RB_FOREACH_SAFE(envent, environ, src, envent1) {
+ if (fnmatch(ov->string, envent->name, 0) == 0) {
+ environ_set(dst, envent->name, 0, "%s", envent->value);
+ found = 1;
+ }
}
- if (envent == NULL)
+ if (!found)
environ_clear(dst, ov->string);
- else
- environ_set(dst, envent->name, 0, "%s", envent->value);
a = options_array_next(a);
}
}