X-Git-Url: https://git.saurik.com/apple/libc.git/blobdiff_plain/5b2abdfbf4211b6592cdd02b9507555a0ecbb04b..224c70764cab4e0e39a26aaf3ad3016552f62f55:/stdlib/getenv.3 diff --git a/stdlib/getenv.3 b/stdlib/getenv.3 index 9a2d953..498a365 100644 --- a/stdlib/getenv.3 +++ b/stdlib/getenv.3 @@ -34,7 +34,7 @@ .\" SUCH DAMAGE. .\" .\" @(#)getenv.3 8.2 (Berkeley) 12/11/93 -.\" $FreeBSD: src/lib/libc/stdlib/getenv.3,v 1.12 2001/09/07 14:46:35 asmodai Exp $ +.\" $FreeBSD: src/lib/libc/stdlib/getenv.3,v 1.16 2004/07/07 19:57:13 ru Exp $ .\" .Dd December 11, 1993 .Dt GETENV 3 @@ -50,22 +50,32 @@ .Sh SYNOPSIS .In stdlib.h .Ft char * -.Fn getenv "const char *name" +.Fo getenv +.Fa "const char *name" +.Fc .Ft int -.Fn setenv "const char *name" "const char *value" "int overwrite" +.Fo putenv +.Fa "char *string" +.Fc .Ft int -.Fn putenv "const char *string" -.Ft void -.Fn unsetenv "const char *name" +.Fo setenv +.Fa "const char *name" +.Fa "const char *value" +.Fa "int overwrite" +.Fc +.Ft int +.Fo unsetenv +.Fa "const char *name" +.Fc .Sh DESCRIPTION These functions set, unset and fetch environment variables from the host .Em environment list . For compatibility with differing environment conventions, the given arguments -.Ar name +.Fa name and -.Ar value +.Fa value may be appended and prepended, respectively, with an equal sign @@ -74,30 +84,27 @@ with an equal sign The .Fn getenv function obtains the current value of the environment variable, -.Ar name . -If the variable -.Ar name -is not in the current environment, -a null pointer is returned. +.Fa name . .Pp The .Fn setenv function inserts or resets the environment variable -.Ar name +.Fa name in the current environment list. If the variable -.Ar name +.Fa name does not exist in the list, it is inserted with the given -.Ar value . +.Fa value . If the variable does exist, the argument -.Ar overwrite +.Fa overwrite is tested; if -.Ar overwrite is +.Fa overwrite +is zero, the variable is not reset, otherwise it is reset to the given -.Ar value . +.Fa value . .Pp The .Fn putenv @@ -107,27 +114,92 @@ equivalent to: setenv(name, value, 1); .Ed .Pp +The string pointed to by +.Fa string +becomes part of the environment. +A program should not alter or free the string, +and should not use stack or other transient string variables +as arguments to +.Fn putenv . +The +.Fn setenv +function is strongly preferred to +.Fn putenv . +.Pp The .Fn unsetenv function deletes all instances of the variable name pointed to by .Fa name from the list. +Note that only the variable name (e.g., "NAME") should be given; +"NAME=value" will not work. .Sh RETURN VALUES -.Rv -std setenv putenv +The +.Fn getenv +function returns the value of the environment variable as a +.Dv NUL Ns +-terminated string. +If the variable +.Fa name +is not in the current environment, +.Dv NULL +is returned. +.Pp +.Rv -std setenv putenv unsetenv .Sh ERRORS .Bl -tag -width Er +.It Bq Er EINVAL +The function +.Fn unsetenv +failed because +.Fa name +was not found in the environment list. .It Bq Er ENOMEM The function .Fn setenv or .Fn putenv -failed because they were unable to allocate memory for the environment. +failed because it was unable to allocate memory for the environment. .El +.Sh LEGACY SYNOPSIS +.Fd #include +.Pp +.Ft void +.br +.Fo unsetenv +.Fa "const char *name" +.Fc ; +.Pp +.Fn unsetenv +doesn't return a value. +.Sh COMPATIBILITY +.Fn putenv +no longer copies its input buffer. +This often appears in crash logs as a crash in +.Fn getenv . +Avoid passing local buffers or freeing the memory +that is passed to +.Fn putenv . +Use +.Fn setenv , +which still makes an internal copy of its buffers. +.Pp +.Fn unsetenv +no longer parses the variable name; +e.g., unsetenv ("FOO=BAR") no longer works. +Use unsetenv("FOO"). +.Fn unsetenv +also now returns a status value and will set +.Va errno +to EINVAL if +.Fa name +is not a defined environment variable. .Sh SEE ALSO .Xr csh 1 , .Xr sh 1 , .Xr execve 2 , +.Xr compat 5 , .Xr environ 7 .Sh STANDARDS The @@ -140,16 +212,18 @@ Successive calls to or .Fn putenv assigning a differently sized -.Ar value +.Fa value to the same -.Ar name -will result in a memory leak. The +.Fa name +will result in a memory leak. +The .Fx semantics for these functions (namely, that the contents of -.Ar value +.Fa value are copied and that old values remain accessible indefinitely) make this -bug unavoidable. Future versions may eliminate one or both of these +bug unavoidable. +Future versions may eliminate one or both of these semantic guarantees in order to fix the bug. .Sh HISTORY The functions