]> git.saurik.com Git - apple/libc.git/blame - stdlib/getenv.3
Libc-594.9.1.tar.gz
[apple/libc.git] / stdlib / getenv.3
CommitLineData
224c7076
A
1.\" Copyright (c) 1988, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
4.\" This code is derived from software contributed to Berkeley by
5.\" the American National Standards Committee X3, on Information
6.\" Processing Systems.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\" notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\" notice, this list of conditions and the following disclaimer in the
15.\" documentation and/or other materials provided with the distribution.
16.\" 3. All advertising materials mentioning features or use of this software
17.\" must display the following acknowledgement:
18.\" This product includes software developed by the University of
19.\" California, Berkeley and its contributors.
20.\" 4. Neither the name of the University nor the names of its contributors
21.\" may be used to endorse or promote products derived from this software
22.\" without specific prior written permission.
23.\"
24.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34.\" SUCH DAMAGE.
35.\"
36.\" @(#)getenv.3 8.2 (Berkeley) 12/11/93
37.\" $FreeBSD: src/lib/libc/stdlib/getenv.3,v 1.16 2004/07/07 19:57:13 ru Exp $
38.\"
39.Dd December 11, 1993
40.Dt GETENV 3
41.Os
42.Sh NAME
43.Nm getenv ,
44.Nm putenv ,
45.Nm setenv ,
46.Nm unsetenv
47.Nd environment variable functions
48.Sh LIBRARY
49.Lb libc
50.Sh SYNOPSIS
51.In stdlib.h
52.Ft char *
53.Fo getenv
54.Fa "const char *name"
55.Fc
56.Ft int
57.Fo putenv
58.Fa "char *string"
59.Fc
60.Ft int
61.Fo setenv
62.Fa "const char *name"
63.Fa "const char *value"
64.Fa "int overwrite"
65.Fc
66.Ft int
67.Fo unsetenv
68.Fa "const char *name"
69.Fc
70.Sh DESCRIPTION
71These functions set, unset and fetch environment variables from the
72host
73.Em environment list .
74For compatibility with differing environment conventions,
75the given arguments
76.Fa name
77and
78.Fa value
79may be appended and prepended,
80respectively,
81with an equal sign
82.Dq Li \&= .
83.Pp
84The
85.Fn getenv
86function obtains the current value of the environment variable,
87.Fa name .
88.Pp
89The
90.Fn setenv
91function inserts or resets the environment variable
92.Fa name
93in the current environment list.
94If the variable
95.Fa name
96does not exist in the list,
97it is inserted with the given
98.Fa value .
99If the variable does exist, the argument
100.Fa overwrite
101is tested; if
102.Fa overwrite
103is
104zero, the
105variable is not reset, otherwise it is reset
106to the given
107.Fa value .
108.Pp
109The
110.Fn putenv
111function takes an argument of the form ``name=value'' and is
112equivalent to:
113.Bd -literal -offset indent
114setenv(name, value, 1);
115.Ed
116.Pp
117The string pointed to by
118.Fa string
119becomes part of the environment.
120A program should not alter or free the string,
121and should not use stack or other transient string variables
122as arguments to
123.Fn putenv .
124The
125.Fn setenv
126function is strongly preferred to
127.Fn putenv .
128.Pp
129The
130.Fn unsetenv
131function
132deletes all instances of the variable name pointed to by
133.Fa name
134from the list.
135Note that only the variable name (e.g., "NAME") should be given;
136"NAME=value" will not work.
137.Sh RETURN VALUES
138The
139.Fn getenv
140function returns the value of the environment variable as a
141.Dv NUL Ns
142-terminated string.
143If the variable
144.Fa name
145is not in the current environment,
146.Dv NULL
147is returned.
148.Pp
149.Rv -std setenv putenv unsetenv
150.Sh ERRORS
151.Bl -tag -width Er
152.It Bq Er EINVAL
153The function
154.Fn unsetenv
155failed because
156.Fa name
157was not found in the environment list.
158.It Bq Er ENOMEM
159The function
160.Fn setenv
161or
162.Fn putenv
163failed because it was unable to allocate memory for the environment.
164.El
165.Sh LEGACY SYNOPSIS
166.Fd #include <stdlib.h>
167.Pp
168.Ft void
169.br
170.Fo unsetenv
171.Fa "const char *name"
172.Fc ;
173.Pp
174.Fn unsetenv
175doesn't return a value.
176.Sh COMPATIBILITY
177.Fn putenv
178no longer copies its input buffer.
179This often appears in crash logs as a crash in
180.Fn getenv .
181Avoid passing local buffers or freeing the memory
182that is passed to
183.Fn putenv .
184Use
185.Fn setenv ,
186which still makes an internal copy of its buffers.
187.Pp
188.Fn unsetenv
189no longer parses the variable name;
190e.g., unsetenv ("FOO=BAR") no longer works.
191Use unsetenv("FOO").
192.Fn unsetenv
193also now returns a status value and will set
194.Va errno
195to EINVAL if
196.Fa name
197is not a defined environment variable.
198.Sh SEE ALSO
199.Xr csh 1 ,
200.Xr sh 1 ,
201.Xr execve 2 ,
202.Xr compat 5 ,
203.Xr environ 7
204.Sh STANDARDS
205The
206.Fn getenv
207function conforms to
208.St -isoC .
209.Sh BUGS
210Successive calls to
211.Fn setenv
212or
213.Fn putenv
214assigning a differently sized
215.Fa value
216to the same
217.Fa name
218will result in a memory leak.
219The
220.Fx
221semantics for these functions
222(namely, that the contents of
223.Fa value
224are copied and that old values remain accessible indefinitely) make this
225bug unavoidable.
226Future versions may eliminate one or both of these
227semantic guarantees in order to fix the bug.
228.Sh HISTORY
229The functions
230.Fn setenv
231and
232.Fn unsetenv
233appeared in
234.At v7 .
235The
236.Fn putenv
237function appeared in
238.Bx 4.3 Reno .