summaryrefslogtreecommitdiff
path: root/contrib/pg_upgrade/util.c
diff options
context:
space:
mode:
authorBruce Momjian2011-05-16 14:46:52 +0000
committerBruce Momjian2011-05-16 14:48:40 +0000
commit6c19bd96bc5139fabace94c5a0a5624fd9d8e986 (patch)
treea7cf4bf9d1462848d010218ccf7ce57554089f45 /contrib/pg_upgrade/util.c
parent78b66cff72d6f337a685355f7ccede1c518681b5 (diff)
Allow pg_upgrade to honor libpq environment variables. Add 'local'
checks for PGHOST and PGHOSTADDR.
Diffstat (limited to 'contrib/pg_upgrade/util.c')
-rw-r--r--contrib/pg_upgrade/util.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/contrib/pg_upgrade/util.c b/contrib/pg_upgrade/util.c
index 9b0bf0f82a7..4094895f46c 100644
--- a/contrib/pg_upgrade/util.c
+++ b/contrib/pg_upgrade/util.c
@@ -244,3 +244,41 @@ str2uint(const char *str)
{
return strtoul(str, NULL, 10);
}
+
+
+/*
+ * pg_putenv()
+ *
+ * This is like putenv(), but takes two arguments.
+ * It also does unsetenv() if val is NULL.
+ */
+void
+pg_putenv(const char *var, const char *val)
+{
+ if (val)
+ {
+#ifndef WIN32
+ char *envstr = (char *) pg_malloc(strlen(var) +
+ strlen(val) + 2);
+
+ sprintf(envstr, "%s=%s", var, val);
+ putenv(envstr);
+
+ /*
+ * Do not free envstr because it becomes part of the environment on
+ * some operating systems. See port/unsetenv.c::unsetenv.
+ */
+#else
+ SetEnvironmentVariableA(var, val);
+#endif
+ }
+ else
+ {
+#ifndef WIN32
+ unsetenv(var);
+#else
+ SetEnvironmentVariableA(var, "");
+#endif
+ }
+}
+