Upstream version 11.39.266.0
[platform/framework/web/crosswalk.git] / src / third_party / npapi / npspy / extern / nspr / prenv.h
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___ */