Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(952)

Side by Side Diff: nspr/pr/src/misc/prenv.c

Issue 2078763002: Delete bundled copy of NSS and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/nss@master
Patch Set: Delete bundled copy of NSS and replace with README. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « nspr/pr/src/misc/prdtoa.c ('k') | nspr/pr/src/misc/prerr.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* This Source Code Form is subject to the terms of the Mozilla Public
3 * License, v. 2.0. If a copy of the MPL was not distributed with this
4 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5
6 #include <string.h>
7 #include <stdlib.h>
8 #include "primpl.h"
9 #include "prmem.h"
10
11 #if defined(XP_UNIX)
12 #include <unistd.h>
13 #if defined(DARWIN)
14 #if defined(HAVE_CRT_EXTERNS_H)
15 #include <crt_externs.h>
16 #endif /* HAVE_CRT_EXTERNS_H */
17 #else /* DARWIN */
18 PR_IMPORT_DATA(char **) environ;
19 #endif /* DARWIN */
20 #endif /* XP_UNIX */
21
22 #if !defined(HAVE_SECURE_GETENV) && defined(HAVE___SECURE_GETENV)
23 #define secure_getenv __secure_getenv
24 #define HAVE_SECURE_GETENV 1
25 #endif
26
27 /* Lock used to lock the environment */
28 #if defined(_PR_NO_PREEMPT)
29 #define _PR_NEW_LOCK_ENV()
30 #define _PR_DELETE_LOCK_ENV()
31 #define _PR_LOCK_ENV()
32 #define _PR_UNLOCK_ENV()
33 #elif defined(_PR_LOCAL_THREADS_ONLY)
34 extern _PRCPU * _pr_primordialCPU;
35 static PRIntn _is;
36 #define _PR_NEW_LOCK_ENV()
37 #define _PR_DELETE_LOCK_ENV()
38 #define _PR_LOCK_ENV() if (_pr_primordialCPU) _PR_INTSOFF(_is);
39 #define _PR_UNLOCK_ENV() if (_pr_primordialCPU) _PR_INTSON(_is);
40 #else
41 static PRLock *_pr_envLock = NULL;
42 #define _PR_NEW_LOCK_ENV() {_pr_envLock = PR_NewLock();}
43 #define _PR_DELETE_LOCK_ENV() \
44 { if (_pr_envLock) { PR_DestroyLock(_pr_envLock); _pr_envLock = NULL; } }
45 #define _PR_LOCK_ENV() { if (_pr_envLock) PR_Lock(_pr_envLock); }
46 #define _PR_UNLOCK_ENV() { if (_pr_envLock) PR_Unlock(_pr_envLock); }
47 #endif
48
49 /************************************************************************/
50
51 void _PR_InitEnv(void)
52 {
53 _PR_NEW_LOCK_ENV();
54 }
55
56 void _PR_CleanupEnv(void)
57 {
58 _PR_DELETE_LOCK_ENV();
59 }
60
61 PR_IMPLEMENT(char*) PR_GetEnv(const char *var)
62 {
63 char *ev;
64
65 if (!_pr_initialized) _PR_ImplicitInitialization();
66
67 _PR_LOCK_ENV();
68 ev = _PR_MD_GET_ENV(var);
69 _PR_UNLOCK_ENV();
70 return ev;
71 }
72
73 PR_IMPLEMENT(char*) PR_GetEnvSecure(const char *var)
74 {
75 #ifdef HAVE_SECURE_GETENV
76 char *ev;
77
78 if (!_pr_initialized) _PR_ImplicitInitialization();
79
80 _PR_LOCK_ENV();
81 ev = secure_getenv(var);
82 _PR_UNLOCK_ENV();
83
84 return ev;
85 #else
86 #ifdef XP_UNIX
87 /*
88 ** Fall back to checking uids and gids. This won't detect any other
89 ** privilege-granting mechanisms the platform may have. This also
90 ** can't detect the case where the process already called
91 ** setuid(geteuid()) and/or setgid(getegid()).
92 */
93 if (getuid() != geteuid() || getgid() != getegid()) {
94 return NULL;
95 }
96 #endif /* XP_UNIX */
97 return PR_GetEnv(var);
98 #endif /* HAVE_SECURE_GETENV */
99 }
100
101 PR_IMPLEMENT(PRStatus) PR_SetEnv(const char *string)
102 {
103 PRIntn result;
104
105 if (!_pr_initialized) _PR_ImplicitInitialization();
106
107 if (!strchr(string, '=')) return(PR_FAILURE);
108
109 _PR_LOCK_ENV();
110 result = _PR_MD_PUT_ENV((char*)string);
111 _PR_UNLOCK_ENV();
112 return result ? PR_FAILURE : PR_SUCCESS;
113 }
114
115 #if defined(XP_UNIX) && (!defined(DARWIN) || defined(HAVE_CRT_EXTERNS_H))
116 PR_IMPLEMENT(char **) PR_DuplicateEnvironment(void)
117 {
118 char **the_environ, **result, **end, **src, **dst;
119
120 _PR_LOCK_ENV();
121 #ifdef DARWIN
122 the_environ = *(_NSGetEnviron());
123 #else
124 the_environ = environ;
125 #endif
126
127 for (end = the_environ; *end != NULL; end++)
128 /* empty loop body */;
129
130 result = (char **)PR_Malloc(sizeof(char *) * (end - the_environ + 1));
131 if (result != NULL) {
132 for (src = the_environ, dst = result; src != end; src++, dst++) {
133 size_t len;
134
135 len = strlen(*src) + 1;
136 *dst = PR_Malloc(len);
137 if (*dst == NULL) {
138 /* Allocation failed. Must clean up the half-copied env. */
139 char **to_delete;
140
141 for (to_delete = result; to_delete != dst; to_delete++) {
142 PR_Free(*to_delete);
143 }
144 PR_Free(result);
145 result = NULL;
146 goto out;
147 }
148 memcpy(*dst, *src, len);
149 }
150 *dst = NULL;
151 }
152 out:
153 _PR_UNLOCK_ENV();
154 return result;
155 }
156 #else
157 /* This platform doesn't support raw access to the environ block. */
158 PR_IMPLEMENT(char **) PR_DuplicateEnvironment(void)
159 {
160 return NULL;
161 }
162 #endif
OLDNEW
« no previous file with comments | « nspr/pr/src/misc/prdtoa.c ('k') | nspr/pr/src/misc/prerr.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698