Mercurial > hg > octave-kai > gnulib-hg
annotate lib/unsetenv.c @ 6650:d8e00d7c098d
Normalize inclusion of `config.h'.
author | Jim Meyering <jim@meyering.net> |
---|---|
date | Fri, 24 Feb 2006 10:09:59 +0000 |
parents | a48fb0e98c8c |
children | 54c2c5912cdc |
rev | line source |
---|---|
5008
b2e3ca7de860
Propagating gettext into gnulib a bit better.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4683
diff
changeset
|
1 /* Copyright (C) 1992,1995-1999,2000-2002 Free Software Foundation, Inc. |
4080 | 2 This file is part of the GNU C Library. |
3 | |
4440
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
4 This program is free software; you can redistribute it and/or modify |
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
5 it under the terms of the GNU General Public License as published by |
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
6 the Free Software Foundation; either version 2, or (at your option) |
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
7 any later version. |
4080 | 8 |
4440
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
9 This program is distributed in the hope that it will be useful, |
4080 | 10 but WITHOUT ANY WARRANTY; without even the implied warranty of |
4440
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
12 GNU General Public License for more details. |
4080 | 13 |
4440
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
14 You should have received a copy of the GNU General Public License along |
e58a1c05a6ba
Update gettext source files from gettext automatically, using srclist-update.
Paul Eggert <eggert@cs.ucla.edu>
parents:
4080
diff
changeset
|
15 with this program; if not, write to the Free Software Foundation, |
5848
a48fb0e98c8c
*** empty log message ***
Paul Eggert <eggert@cs.ucla.edu>
parents:
5008
diff
changeset
|
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
4080 | 17 |
6650
d8e00d7c098d
Normalize inclusion of `config.h'.
Jim Meyering <jim@meyering.net>
parents:
5848
diff
changeset
|
18 #ifdef HAVE_CONFIG_H |
4080 | 19 # include <config.h> |
20 #endif | |
21 | |
22 #include <errno.h> | |
23 #if !_LIBC | |
24 # if !defined errno && !defined HAVE_ERRNO_DECL | |
25 extern int errno; | |
26 # endif | |
27 # define __set_errno(ev) ((errno) = (ev)) | |
28 #endif | |
29 | |
4683
4452e4c45cc4
Assume ANSI C <string.h>, <stdlib.h>.
Bruno Haible <bruno@clisp.org>
parents:
4440
diff
changeset
|
30 #include <stdlib.h> |
4452e4c45cc4
Assume ANSI C <string.h>, <stdlib.h>.
Bruno Haible <bruno@clisp.org>
parents:
4440
diff
changeset
|
31 #include <string.h> |
4080 | 32 #if _LIBC || HAVE_UNISTD_H |
33 # include <unistd.h> | |
34 #endif | |
35 | |
36 #if !_LIBC | |
37 # define __environ environ | |
38 # ifndef HAVE_ENVIRON_DECL | |
39 extern char **environ; | |
40 # endif | |
41 #endif | |
42 | |
43 #if _LIBC | |
44 /* This lock protects against simultaneous modifications of `environ'. */ | |
45 # include <bits/libc-lock.h> | |
46 __libc_lock_define_initialized (static, envlock) | |
47 # define LOCK __libc_lock_lock (envlock) | |
48 # define UNLOCK __libc_lock_unlock (envlock) | |
49 #else | |
50 # define LOCK | |
51 # define UNLOCK | |
52 #endif | |
53 | |
54 /* In the GNU C library we must keep the namespace clean. */ | |
55 #ifdef _LIBC | |
56 # define unsetenv __unsetenv | |
57 #endif | |
58 | |
59 | |
60 int | |
61 unsetenv (const char *name) | |
62 { | |
63 size_t len; | |
64 char **ep; | |
65 | |
66 if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) | |
67 { | |
68 __set_errno (EINVAL); | |
69 return -1; | |
70 } | |
71 | |
72 len = strlen (name); | |
73 | |
74 LOCK; | |
75 | |
76 ep = __environ; | |
77 while (*ep != NULL) | |
78 if (!strncmp (*ep, name, len) && (*ep)[len] == '=') | |
79 { | |
80 /* Found it. Remove this pointer by moving later ones back. */ | |
81 char **dp = ep; | |
82 | |
83 do | |
84 dp[0] = dp[1]; | |
85 while (*dp++); | |
86 /* Continue the loop in case NAME appears again. */ | |
87 } | |
88 else | |
89 ++ep; | |
90 | |
91 UNLOCK; | |
92 | |
93 return 0; | |
94 } | |
95 | |
96 #ifdef _LIBC | |
97 # undef unsetenv | |
98 weak_alias (__unsetenv, unsetenv) | |
99 #endif |