]> git.saurik.com Git - apple/libc.git/blobdiff - stdlib/getenv.3
Libc-498.tar.gz
[apple/libc.git] / stdlib / getenv.3
index 9a2d953dab5e3f39529114940a61a710dc60faba..498a365c429d9afb8ec080a612d55ccc2512e1b1 100644 (file)
@@ -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
 .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 <stdlib.h>
+.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