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

Side by Side Diff: gecko-sdk/include/prshma.h

Issue 20346: Version 1.8 of gecko-sdk. Downloaded from here:... (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/
Patch Set: Created 11 years, 10 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 | Annotate | Revision Log
« no previous file with comments | « gecko-sdk/include/prshm.h ('k') | gecko-sdk/include/prsystem.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 *
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
9 *
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
14 *
15 * The Original Code is the Netscape Portable Runtime (NSPR).
16 *
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1999-2000
20 * the Initial Developer. All Rights Reserved.
21 *
22 * Contributor(s):
23 *
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
35 *
36 * ***** END LICENSE BLOCK ***** */
37
38 /*
39 ** prshma.h -- NSPR Anonymous Shared Memory
40 **
41 ** NSPR provides an anonymous shared memory based on NSPR's PRFileMap
42 ** type. The anonymous file-mapped shared memory provides an inheritable
43 ** shared memory, as in: the child process inherits the shared memory.
44 ** Compare the file-mapped anonymous shared memory to to a named shared
45 ** memory described in prshm.h. The intent is to provide a shared
46 ** memory that is accessable only by parent and child processes. ...
47 ** It's a security thing.
48 **
49 ** Depending on the underlying platform, the file-mapped shared memory
50 ** may be backed by a file. ... surprise! ... On some platforms, no
51 ** real file backs the shared memory. On platforms where the shared
52 ** memory is backed by a file, the file's name in the filesystem is
53 ** visible to other processes for only the duration of the creation of
54 ** the file, hopefully a very short time. This restricts processess
55 ** that do not inherit the shared memory from opening the file and
56 ** reading or writing its contents. Further, when all processes
57 ** using an anonymous shared memory terminate, the backing file is
58 ** deleted. ... If you are not paranoid, you're not paying attention.
59 **
60 ** The file-mapped shared memory requires a protocol for the parent
61 ** process and child process to share the memory. NSPR provides two
62 ** protocols. Use one or the other; don't mix and match.
63 **
64 ** In the first protocol, the job of passing the inheritable shared
65 ** memory is done via helper-functions with PR_CreateProcess(). In the
66 ** second protocol, the parent process is responsible for creating the
67 ** child process; the parent and child are mutually responsible for
68 ** passing a FileMap string. NSPR provides helper functions for
69 ** extracting data from the PRFileMap object. ... See the examples
70 ** below.
71 **
72 ** Both sides should adhere strictly to the protocol for proper
73 ** operation. The pseudo-code below shows the use of a file-mapped
74 ** shared memory by a parent and child processes. In the examples, the
75 ** server creates the file-mapped shared memory, the client attaches to
76 ** it.
77 **
78 ** First protocol.
79 ** Server:
80 **
81 ** fm = PR_OpenAnonFileMap(dirName, size, FilemapProt);
82 ** addr = PR_MemMap(fm);
83 ** attr = PR_NewProcessAttr();
84 ** PR_ProcessAttrSetInheritableFileMap( attr, fm, shmname );
85 ** PR_CreateProcess(Client);
86 ** PR_DestroyProcessAttr(attr);
87 ** ... yadda ...
88 ** PR_MemUnmap( addr );
89 ** PR_CloseFileMap(fm);
90 **
91 **
92 ** Client:
93 ** ... started by server via PR_CreateProcess()
94 ** fm = PR_GetInheritedFileMap( shmname );
95 ** addr = PR_MemMap(fm);
96 ** ... yadda ...
97 ** PR_MemUnmap(addr);
98 ** PR_CloseFileMap(fm);
99 **
100 **
101 ** Second Protocol:
102 ** Server:
103 **
104 ** fm = PR_OpenAnonFileMap(dirName, size, FilemapProt);
105 ** fmstring = PR_ExportFileMapAsString( fm );
106 ** addr = PR_MemMap(fm);
107 ** ... application specific technique to pass fmstring to child
108 ** ... yadda ... Server uses his own magic to create child
109 ** PR_MemUnmap( addr );
110 ** PR_CloseFileMap(fm);
111 **
112 **
113 ** Client:
114 ** ... started by server via his own magic
115 ** ... application specific technique to find fmstring from parent
116 ** fm = PR_ImportFileMapFromString( fmstring )
117 ** addr = PR_MemMap(fm);
118 ** ... yadda ...
119 ** PR_MemUnmap(addr);
120 ** PR_CloseFileMap(fm);
121 **
122 **
123 ** lth. 2-Jul-1999.
124 **
125 ** Note: The second protocol was requested by NelsonB (7/1999); this is
126 ** to accomodate servers which already create their own child processes
127 ** using platform native methods.
128 **
129 */
130
131 #ifndef prshma_h___
132 #define prshma_h___
133
134 #include "prtypes.h"
135 #include "prio.h"
136 #include "prproces.h"
137
138 PR_BEGIN_EXTERN_C
139
140 /*
141 ** PR_OpenAnonFileMap() -- Creates an anonymous file-mapped shared memory
142 **
143 ** Description:
144 ** PR_OpenAnonFileMap() creates an anonymous shared memory. If the
145 ** shared memory already exists, a handle is returned to that shared
146 ** memory object.
147 **
148 ** On Unix platforms, PR_OpenAnonFileMap() uses 'dirName' as a
149 ** directory name, without the trailing '/', to contain the anonymous
150 ** file. A filename is generated for the name.
151 **
152 ** On Windows platforms, dirName is ignored.
153 **
154 ** Inputs:
155 ** dirName -- A directory name to contain the anonymous file.
156 ** size -- The size of the shared memory
157 ** prot -- How the shared memory is mapped. See prio.h
158 **
159 ** Outputs:
160 ** PRFileMap *
161 **
162 ** Returns:
163 ** Pointer to PRFileMap or NULL on error.
164 **
165 */
166 NSPR_API( PRFileMap *)
167 PR_OpenAnonFileMap(
168 const char *dirName,
169 PRSize size,
170 PRFileMapProtect prot
171 );
172
173 /*
174 ** PR_ProcessAttrSetInheritableFileMap() -- Prepare FileMap for export
175 ** to my children processes via PR_CreateProcess()
176 **
177 ** Description:
178 ** PR_ProcessAttrSetInheritableFileMap() connects the PRFileMap to
179 ** PRProcessAttr with shmname. A subsequent call to PR_CreateProcess()
180 ** makes the PRFileMap importable by the child process.
181 **
182 ** Inputs:
183 ** attr -- PRProcessAttr, used to pass data to PR_CreateProcess()
184 ** fm -- PRFileMap structure to be passed to the child process
185 ** shmname -- The name for the PRFileMap; used by child.
186 **
187 ** Outputs:
188 ** PRFileMap *
189 **
190 ** Returns:
191 ** PRStatus
192 **
193 */
194 NSPR_API(PRStatus)
195 PR_ProcessAttrSetInheritableFileMap(
196 PRProcessAttr *attr,
197 PRFileMap *fm,
198 const char *shmname
199 );
200
201 /*
202 ** PR_GetInheritedFileMap() -- Import a PRFileMap previously exported
203 ** by my parent process via PR_CreateProcess()
204 **
205 ** Description:
206 ** PR_GetInheritedFileMap() retrieves a PRFileMap object exported from
207 ** its parent process via PR_CreateProcess().
208 **
209 ** Inputs:
210 ** shmname -- The name provided to PR_ProcessAttrSetInheritableFileMap()
211 **
212 ** Outputs:
213 ** PRFileMap *
214 **
215 ** Returns:
216 ** PRFileMap pointer or NULL.
217 **
218 */
219 NSPR_API( PRFileMap *)
220 PR_GetInheritedFileMap(
221 const char *shmname
222 );
223
224 /*
225 ** PR_ExportFileMapAsString() -- Creates a string identifying a PRFileMap
226 **
227 ** Description:
228 ** Creates an identifier, as a string, from a PRFileMap object
229 ** previously created with PR_OpenAnonFileMap().
230 **
231 ** Inputs:
232 ** fm -- PRFileMap pointer to be represented as a string.
233 ** bufsize -- sizeof(buf)
234 ** buf -- a buffer of length PR_FILEMAP_STRING_BUFSIZE
235 **
236 ** Outputs:
237 ** buf contains the stringized PRFileMap identifier
238 **
239 ** Returns:
240 ** PRStatus
241 **
242 */
243 NSPR_API( PRStatus )
244 PR_ExportFileMapAsString(
245 PRFileMap *fm,
246 PRSize bufsize,
247 char *buf
248 );
249 #define PR_FILEMAP_STRING_BUFSIZE 128
250
251 /*
252 ** PR_ImportFileMapFromString() -- Creates a PRFileMap from the identifying stri ng
253 **
254 ** Description:
255 ** PR_ImportFileMapFromString() creates a PRFileMap object from a
256 ** string previously created by PR_ExportFileMapAsString().
257 **
258 ** Inputs:
259 ** fmstring -- string created by PR_ExportFileMapAsString()
260 **
261 ** Returns:
262 ** PRFileMap pointer or NULL.
263 **
264 */
265 NSPR_API( PRFileMap * )
266 PR_ImportFileMapFromString(
267 const char *fmstring
268 );
269
270 PR_END_EXTERN_C
271 #endif /* prshma_h___ */
OLDNEW
« no previous file with comments | « gecko-sdk/include/prshm.h ('k') | gecko-sdk/include/prsystem.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698