2003-08-07 Matthias Clasen <maclas@gmx.de>
+ * tests/env-test.c: Add tests for '=' in names and values.
+
+ * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a
+ declaration for environ. (#119338)
+
* acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091)
* tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion.
2003-08-07 Matthias Clasen <maclas@gmx.de>
+ * tests/env-test.c: Add tests for '=' in names and values.
+
+ * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a
+ declaration for environ. (#119338)
+
* acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091)
* tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion.
2003-08-07 Matthias Clasen <maclas@gmx.de>
+ * tests/env-test.c: Add tests for '=' in names and values.
+
+ * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a
+ declaration for environ. (#119338)
+
* acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091)
* tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion.
2003-08-07 Matthias Clasen <maclas@gmx.de>
+ * tests/env-test.c: Add tests for '=' in names and values.
+
+ * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a
+ declaration for environ. (#119338)
+
* acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091)
* tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion.
2003-08-07 Matthias Clasen <maclas@gmx.de>
+ * tests/env-test.c: Add tests for '=' in names and values.
+
+ * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a
+ declaration for environ. (#119338)
+
* acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091)
* tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion.
2003-08-07 Matthias Clasen <maclas@gmx.de>
+ * tests/env-test.c: Add tests for '=' in names and values.
+
+ * glib/gutils.c (g_setenv, g_unsetenv): Check that the variable name doesn't contain '='. Add a
+ declaration for environ. (#119338)
+
* acinclude.m4: Tighten the snprintf() test to check behaviour on zero-size buffers. (#106091)
* tests/patterntest.c: Specify test strings in UTF-8, remove all charset conversion.
/**
* g_setenv:
- * @variable: the environment variable to set.
+ * @variable: the environment variable to set, must not contain '='.
* @value: the value for to set the variable to.
* @overwrite: whether to change the variable if it already exists.
*
gboolean overwrite)
{
gint result;
+ g_return_val_if_fail (strchr (variable, '=') == NULL, FALSE);
#ifdef HAVE_SETENV
result = setenv (variable, value, overwrite);
#else
#endif
return result == 0;
}
-
+
+#ifndef HAVE_UNSETENV
+/* According to the Single Unix Specification, environ is not in
+ * any system header, although unistd.h often declares it.
+ */
+extern char **environ;
+#endif
+
/**
* g_unsetenv:
- * @variable: the environment variable to remove.
+ * @variable: the environment variable to remove, must not contain '='.
*
* Removes an environment variable from the environment.
*
g_unsetenv (const gchar *variable)
{
#ifdef HAVE_UNSETENV
+ g_return_if_fail (strchr (variable, '=') == NULL);
+
unsetenv (variable);
#else
int i, len;
gchar **e, **f;
-
+
+ g_return_if_fail (strchr (variable, '=') == NULL);
+
len = strlen (variable);
/* Mess directly with the environ array.
#endif
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include <unistd.h>
#endif
+static void
+log (const gchar *log_domain,
+ GLogLevelFlags log_level,
+ const gchar *message,
+ gpointer user_data)
+{
+ /* Silence g_assert () and friends.
+ */
+}
+
int
main (int argc, char *argv[])
{
gchar *value1 = "works";
gchar *value2 = "again";
+ g_log_set_handler ("GLib", G_LOG_LEVEL_CRITICAL, log, NULL);
+
data = g_getenv (variable);
g_assert (data == NULL && "TEST_G_SETENV already set");
data = g_getenv (variable);
g_assert (data == NULL && "g_unsetenv() doesn't work");
+ result = g_setenv ("foo=bar", "baz", TRUE);
+ g_assert (!result && "g_setenv() accepts '=' in names");
+
+ result = g_setenv ("foo", "bar=baz", TRUE);
+ g_assert (result && "g_setenv() doesn't accept '=' in values");
+ data = g_getenv ("foo=bar");
+ g_assert (strcmp (data, "baz") == 0 && "g_getenv() doesn't support '=' in names");
+ data = g_getenv ("foo");
+ g_assert (strcmp (data, "bar=baz") == 0 && "g_getenv() doesn't support '=' in values");
+
+ g_unsetenv ("foo=bar");
+ data = g_getenv ("foo");
+ g_assert (data != NULL && "g_unsetenv() accepts '=' in names");
+ g_unsetenv ("foo");
+ data = g_getenv ("foo");
+ g_assert (data == NULL && "g_unsetenv() doesn't support '=' in values");
+
return 0;
}