1/* GLIB - Library of useful routines for C programming
2 * Copyright (C) 1995-1997  Peter Mattis, Spencer Kimball and Josh MacDonald
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
18 */
19
20/*
21 * Modified by the GLib Team and others 1997-2000.  See the AUTHORS
22 * file for a list of people on the GLib Team.  See the ChangeLog
23 * files for a list of changes.  These files are distributed with
24 * GLib at ftp://ftp.gtk.org/pub/gtk/.
25 */
26
27#include "config.h"
28
29#undef G_DISABLE_ASSERT
30#undef G_LOG_DOMAIN
31
32#ifdef GLIB_COMPILATION
33#undef GLIB_COMPILATION
34#endif
35
36#include <stdio.h>
37#include <stdlib.h>
38#include <string.h>
39
40#include <glib.h>
41
42#ifdef HAVE_UNISTD_H
43#include <unistd.h>
44#endif
45
46int
47main (int argc, char *argv[])
48{
49  gboolean result;
50  const gchar *data;
51  gchar *variable = "TEST_G_SETENV";
52  gchar *value1 = "works";
53  gchar *value2 = "again";
54
55  data = g_getenv (variable);
56  g_assert (data == NULL && "TEST_G_SETENV already set");
57
58  result = g_setenv (variable, value1, TRUE);
59  g_assert (result && "g_setenv() failed");
60
61  data = g_getenv (variable);
62  g_assert (data != NULL && "g_getenv() returns NULL");
63  g_assert (strcmp (data, value1) == 0 && "g_getenv() returns wrong value");
64
65  result = g_setenv (variable, value2, FALSE);
66  g_assert (result && "g_setenv() failed");
67
68  data = g_getenv (variable);
69  g_assert (data != NULL && "g_getenv() returns NULL");
70  g_assert (strcmp (data, value2) != 0 && "g_setenv() always overwrites");
71  g_assert (strcmp (data, value1) == 0 && "g_getenv() returns wrong value");
72
73  result = g_setenv (variable, value2, TRUE);
74  g_assert (result && "g_setenv() failed");
75
76  data = g_getenv (variable);
77  g_assert (data != NULL && "g_getenv() returns NULL");
78  g_assert (strcmp (data, value1) != 0 && "g_setenv() doesn't overwrite");
79  g_assert (strcmp (data, value2) == 0 && "g_getenv() returns wrong value");
80
81  g_unsetenv (variable);
82  data = g_getenv (variable);
83  g_assert (data == NULL && "g_unsetenv() doesn't work");
84
85#if 0
86  /* We can't test this, because it's an illegal argument that
87   * we g_return_if_fail for.
88   */
89  result = g_setenv ("foo=bar", "baz", TRUE);
90  g_assert (!result && "g_setenv() accepts '=' in names");
91#endif
92
93  result = g_setenv ("foo", "bar=baz", TRUE);
94  g_assert (result && "g_setenv() doesn't accept '=' in values");
95#if 0
96  /* While glibc supports '=' in names in getenv(), SUS doesn't say anything about it,
97   * and Solaris doesn't support it.
98   */
99  data = g_getenv ("foo=bar");
100  g_assert (strcmp (data, "baz") == 0 && "g_getenv() doesn't support '=' in names");
101#endif
102  data = g_getenv ("foo");
103  g_assert (strcmp (data, "bar=baz") == 0 && "g_getenv() doesn't support '=' in values");
104
105#if 0
106  /* We can't test this, because it's an illegal argument that
107   * we g_return_if_fail for. Plus how would we check for failure,
108   * since we can't set the value...
109   */
110  g_unsetenv ("foo=bar");
111#endif
112  g_unsetenv ("foo");
113  data = g_getenv ("foo");
114  g_assert (data == NULL && "g_unsetenv() doesn't support '=' in values");
115
116  return 0;
117}
118