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