|
|
1.1 root 1: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2: /*
3: * The contents of this file are subject to the Mozilla Public
4: * License Version 1.1 (the "License"); you may not use this file
5: * except in compliance with the License. You may obtain a copy of
6: * the License at http://www.mozilla.org/MPL/
7: *
8: * Software distributed under the License is distributed on an "AS
9: * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
10: * implied. See the License for the specific language governing
11: * rights and limitations under the License.
12: *
13: * The Original Code is the Netscape Portable Runtime (NSPR).
14: *
15: * The Initial Developer of the Original Code is Netscape
16: * Communications Corporation. Portions created by Netscape are
17: * Copyright (C) 1998-2000 Netscape Communications Corporation. All
18: * Rights Reserved.
19: *
20: * Contributor(s):
21: *
22: * Alternatively, the contents of this file may be used under the
23: * terms of the GNU General Public License Version 2 or later (the
24: * "GPL"), in which case the provisions of the GPL are applicable
25: * instead of those above. If you wish to allow use of your
26: * version of this file only under the terms of the GPL and not to
27: * allow others to use your version of this file under the MPL,
28: * indicate your decision by deleting the provisions above and
29: * replace them with the notice and other provisions requiored by
30: * the GPL. If you do not delete the provisions above, a recipient
31: * may use your version of this file under either the MPL or the
32: * GPL.
33: */
34:
35: #ifndef prenv_h___
36: #define prenv_h___
37:
38: #include "prtypes.h"
39:
40: /*******************************************************************************/
41: /*******************************************************************************/
42: /****************** THESE FUNCTIONS MAY NOT BE THREAD SAFE *********************/
43: /*******************************************************************************/
44: /*******************************************************************************/
45:
46: PR_BEGIN_EXTERN_C
47:
48: /*
49: ** PR_GetEnv() -- Retrieve value of environment variable
50: **
51: ** Description:
52: ** PR_GetEnv() is modeled on Unix getenv().
53: **
54: **
55: ** Inputs:
56: ** var -- The name of the environment variable
57: **
58: ** Returns:
59: ** The value of the environment variable 'var' or NULL if
60: ** the variable is undefined.
61: **
62: ** Restrictions:
63: ** You'd think that a POSIX getenv(), putenv() would be
64: ** consistently implemented everywhere. Surprise! It is not. On
65: ** some platforms, a putenv() where the argument is of
66: ** the form "name" causes the named environment variable to
67: ** be un-set; that is: a subsequent getenv() returns NULL. On
68: ** other platforms, the putenv() fails, on others, it is a
69: ** no-op. Similarly, a putenv() where the argument is of the
70: ** form "name=" causes the named environment variable to be
71: ** un-set; a subsequent call to getenv() returns NULL. On
72: ** other platforms, a subsequent call to getenv() returns a
73: ** pointer to a null-string (a byte of zero).
74: **
75: ** PR_GetEnv(), PR_SetEnv() provide a consistent behavior
76: ** across all supported platforms. There are, however, some
77: ** restrictions and some practices you must use to achieve
78: ** consistent results everywhere.
79: **
80: ** When manipulating the environment there is no way to un-set
81: ** an environment variable across all platforms. We suggest
82: ** you interpret the return of a pointer to null-string to
83: ** mean the same as a return of NULL from PR_GetEnv().
84: **
85: ** A call to PR_SetEnv() where the parameter is of the form
86: ** "name" will return PR_FAILURE; the environment remains
87: ** unchanged. A call to PR_SetEnv() where the parameter is
88: ** of the form "name=" may un-set the envrionment variable on
89: ** some platforms; on others it may set the value of the
90: ** environment variable to the null-string.
91: **
92: ** For example, to test for NULL return or return of the
93: ** null-string from PR_GetEnv(), use the following code
94: ** fragment:
95: **
96: ** char *val = PR_GetEnv("foo");
97: ** if ((NULL == val) || ('\0' == *val)) {
98: ** ... interpret this as un-set ...
99: ** }
100: **
101: ** The caller must ensure that the string passed
102: ** to PR_SetEnv() is persistent. That is: The string should
103: ** not be on the stack, where it can be overwritten
104: ** on return from the function calling PR_SetEnv().
105: ** Similarly, the string passed to PR_SetEnv() must not be
106: ** overwritten by other actions of the process. ... Some
107: ** platforms use the string by reference rather than copying
108: ** it into the environment space. ... You have been warned!
109: **
110: ** Use of platform-native functions that manipulate the
111: ** environment (getenv(), putenv(),
112: ** SetEnvironmentVariable(), etc.) must not be used with
113: ** NSPR's similar functions. The platform-native functions
114: ** may not be thread safe and/or may operate on different
115: ** conceptual environment space than that operated upon by
116: ** NSPR's functions or other environment manipulating
117: ** functions on the same platform. (!)
118: **
119: */
120: NSPR_API(char*) PR_GetEnv(const char *var);
121:
122: /*
123: ** PR_SetEnv() -- set, unset or change an environment variable
124: **
125: ** Description:
126: ** PR_SetEnv() is modeled on the Unix putenv() function.
127: **
128: ** Inputs:
129: ** string -- pointer to a caller supplied
130: ** constant, persistent string of the form name=value. Where
131: ** name is the name of the environment variable to be set or
132: ** changed; value is the value assigned to the variable.
133: **
134: ** Returns:
135: ** PRStatus.
136: **
137: ** Restrictions:
138: ** See the Restrictions documented in the description of
139: ** PR_GetEnv() in this header file.
140: **
141: **
142: */
143: NSPR_API(PRStatus) PR_SetEnv(const char *string);
144:
145: /*
146: ** DEPRECATED. Use PR_SetEnv() instead.
147: */
148: #ifdef XP_MAC
149: NSPR_API(PRIntn) PR_PutEnv(const char *string);
150: #endif
151:
152: PR_END_EXTERN_C
153:
154: #endif /* prenv_h___ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.