summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicm <nicm@openbsd.org>2010-12-13 22:53:14 +0000
committernicm <nicm@openbsd.org>2010-12-13 22:53:14 +0000
commit7ec72e3fe6e1abdefb5ec7cd06a542f162efa84d (patch)
tree10da2f893a285268a5e09d42e9cf0984162a4f42
parentsame bug, should have guessed this would come from gnu portability stupidity. (diff)
downloadwireguard-openbsd-7ec72e3fe6e1abdefb5ec7cd06a542f162efa84d.tar.xz
wireguard-openbsd-7ec72e3fe6e1abdefb5ec7cd06a542f162efa84d.zip
Read ${X} environment variables in strings and $HOME from the global
environment rather than getenv, this allows them to be updated during the configuration file.
-rw-r--r--usr.bin/tmux/cmd-string.c32
1 files changed, 17 insertions, 15 deletions
diff --git a/usr.bin/tmux/cmd-string.c b/usr.bin/tmux/cmd-string.c
index a0c6a0f050f..4b0c962e9e3 100644
--- a/usr.bin/tmux/cmd-string.c
+++ b/usr.bin/tmux/cmd-string.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cmd-string.c,v 1.14 2010/02/19 17:14:23 nicm Exp $ */
+/* $OpenBSD: cmd-string.c,v 1.15 2010/12/13 22:53:14 nicm Exp $ */
/*
* Copyright (c) 2008 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -247,9 +247,10 @@ error:
char *
cmd_string_variable(const char *s, size_t *p)
{
- int ch, fch;
- char *buf, *t;
- size_t len;
+ int ch, fch;
+ char *buf, *t;
+ size_t len;
+ struct environ_entry *envent;
#define cmd_string_first(ch) ((ch) == '_' || \
((ch) >= 'a' && (ch) <= 'z') || ((ch) >= 'A' && (ch) <= 'Z'))
@@ -301,12 +302,11 @@ cmd_string_variable(const char *s, size_t *p)
buf = xrealloc(buf, 1, len + 1);
buf[len] = '\0';
- if ((t = getenv(buf)) == NULL) {
- xfree(buf);
- return (xstrdup(""));
- }
+ envent = environ_find(&global_environ, buf);
xfree(buf);
- return (xstrdup(t));
+ if (envent == NULL)
+ return (xstrdup(""));
+ return (xstrdup(envent->value));
error:
if (buf != NULL)
@@ -317,15 +317,17 @@ error:
char *
cmd_string_expand_tilde(const char *s, size_t *p)
{
- struct passwd *pw;
- char *home, *path, *username;
+ struct passwd *pw;
+ struct environ_entry *envent;
+ char *home, *path, *username;
home = NULL;
if (cmd_string_getc(s, p) == '/') {
- if ((home = getenv("HOME")) == NULL || *home == '\0') {
- if ((pw = getpwuid(getuid())) != NULL)
- home = pw->pw_dir;
- }
+ envent = environ_find(&global_environ, "HOME");
+ if (envent != NULL && *envent->value != '\0')
+ home = envent->value;
+ else if ((pw = getpwuid(getuid())) != NULL)
+ home = pw->pw_dir;
} else {
cmd_string_ungetc(p);
if ((username = cmd_string_string(s, p, '/', 0)) == NULL)