Fix Centurion name.
[0ad.git] / libraries / source / spidermonkey / include-win32-release / nspr / prshma.h
blobda0071f995fd033ece94bed02104b8313d28962a
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/. */
6 /*
7 ** prshma.h -- NSPR Anonymous Shared Memory
8 **
9 ** NSPR provides an anonymous shared memory based on NSPR's PRFileMap
10 ** type. The anonymous file-mapped shared memory provides an inheritable
11 ** shared memory, as in: the child process inherits the shared memory.
12 ** Compare the file-mapped anonymous shared memory to to a named shared
13 ** memory described in prshm.h. The intent is to provide a shared
14 ** memory that is accessable only by parent and child processes. ...
15 ** It's a security thing.
17 ** Depending on the underlying platform, the file-mapped shared memory
18 ** may be backed by a file. ... surprise! ... On some platforms, no
19 ** real file backs the shared memory. On platforms where the shared
20 ** memory is backed by a file, the file's name in the filesystem is
21 ** visible to other processes for only the duration of the creation of
22 ** the file, hopefully a very short time. This restricts processess
23 ** that do not inherit the shared memory from opening the file and
24 ** reading or writing its contents. Further, when all processes
25 ** using an anonymous shared memory terminate, the backing file is
26 ** deleted. ... If you are not paranoid, you're not paying attention.
28 ** The file-mapped shared memory requires a protocol for the parent
29 ** process and child process to share the memory. NSPR provides two
30 ** protocols. Use one or the other; don't mix and match.
32 ** In the first protocol, the job of passing the inheritable shared
33 ** memory is done via helper-functions with PR_CreateProcess(). In the
34 ** second protocol, the parent process is responsible for creating the
35 ** child process; the parent and child are mutually responsible for
36 ** passing a FileMap string. NSPR provides helper functions for
37 ** extracting data from the PRFileMap object. ... See the examples
38 ** below.
40 ** Both sides should adhere strictly to the protocol for proper
41 ** operation. The pseudo-code below shows the use of a file-mapped
42 ** shared memory by a parent and child processes. In the examples, the
43 ** server creates the file-mapped shared memory, the client attaches to
44 ** it.
46 ** First protocol.
47 ** Server:
49 ** fm = PR_OpenAnonFileMap(dirName, size, FilemapProt);
50 ** addr = PR_MemMap(fm);
51 ** attr = PR_NewProcessAttr();
52 ** PR_ProcessAttrSetInheritableFileMap( attr, fm, shmname );
53 ** PR_CreateProcess(Client);
54 ** PR_DestroyProcessAttr(attr);
55 ** ... yadda ...
56 ** PR_MemUnmap( addr );
57 ** PR_CloseFileMap(fm);
60 ** Client:
61 ** ... started by server via PR_CreateProcess()
62 ** fm = PR_GetInheritedFileMap( shmname );
63 ** addr = PR_MemMap(fm);
64 ** ... yadda ...
65 ** PR_MemUnmap(addr);
66 ** PR_CloseFileMap(fm);
69 ** Second Protocol:
70 ** Server:
72 ** fm = PR_OpenAnonFileMap(dirName, size, FilemapProt);
73 ** fmstring = PR_ExportFileMapAsString( fm );
74 ** addr = PR_MemMap(fm);
75 ** ... application specific technique to pass fmstring to child
76 ** ... yadda ... Server uses his own magic to create child
77 ** PR_MemUnmap( addr );
78 ** PR_CloseFileMap(fm);
81 ** Client:
82 ** ... started by server via his own magic
83 ** ... application specific technique to find fmstring from parent
84 ** fm = PR_ImportFileMapFromString( fmstring )
85 ** addr = PR_MemMap(fm);
86 ** ... yadda ...
87 ** PR_MemUnmap(addr);
88 ** PR_CloseFileMap(fm);
91 ** lth. 2-Jul-1999.
93 ** Note: The second protocol was requested by NelsonB (7/1999); this is
94 ** to accomodate servers which already create their own child processes
95 ** using platform native methods.
99 #ifndef prshma_h___
100 #define prshma_h___
102 #include "prtypes.h"
103 #include "prio.h"
104 #include "prproces.h"
106 PR_BEGIN_EXTERN_C
109 ** PR_OpenAnonFileMap() -- Creates an anonymous file-mapped shared memory
111 ** Description:
112 ** PR_OpenAnonFileMap() creates an anonymous shared memory. If the
113 ** shared memory already exists, a handle is returned to that shared
114 ** memory object.
116 ** On Unix platforms, PR_OpenAnonFileMap() uses 'dirName' as a
117 ** directory name, without the trailing '/', to contain the anonymous
118 ** file. A filename is generated for the name.
120 ** On Windows platforms, dirName is ignored.
122 ** Inputs:
123 ** dirName -- A directory name to contain the anonymous file.
124 ** size -- The size of the shared memory
125 ** prot -- How the shared memory is mapped. See prio.h
127 ** Outputs:
128 ** PRFileMap *
130 ** Returns:
131 ** Pointer to PRFileMap or NULL on error.
134 NSPR_API( PRFileMap *)
135 PR_OpenAnonFileMap(
136 const char *dirName,
137 PRSize size,
138 PRFileMapProtect prot
142 ** PR_ProcessAttrSetInheritableFileMap() -- Prepare FileMap for export
143 ** to my children processes via PR_CreateProcess()
145 ** Description:
146 ** PR_ProcessAttrSetInheritableFileMap() connects the PRFileMap to
147 ** PRProcessAttr with shmname. A subsequent call to PR_CreateProcess()
148 ** makes the PRFileMap importable by the child process.
150 ** Inputs:
151 ** attr -- PRProcessAttr, used to pass data to PR_CreateProcess()
152 ** fm -- PRFileMap structure to be passed to the child process
153 ** shmname -- The name for the PRFileMap; used by child.
155 ** Outputs:
156 ** PRFileMap *
158 ** Returns:
159 ** PRStatus
162 NSPR_API(PRStatus)
163 PR_ProcessAttrSetInheritableFileMap(
164 PRProcessAttr *attr,
165 PRFileMap *fm,
166 const char *shmname
170 ** PR_GetInheritedFileMap() -- Import a PRFileMap previously exported
171 ** by my parent process via PR_CreateProcess()
173 ** Description:
174 ** PR_GetInheritedFileMap() retrieves a PRFileMap object exported from
175 ** its parent process via PR_CreateProcess().
177 ** Inputs:
178 ** shmname -- The name provided to PR_ProcessAttrSetInheritableFileMap()
180 ** Outputs:
181 ** PRFileMap *
183 ** Returns:
184 ** PRFileMap pointer or NULL.
187 NSPR_API( PRFileMap *)
188 PR_GetInheritedFileMap(
189 const char *shmname
193 ** PR_ExportFileMapAsString() -- Creates a string identifying a PRFileMap
195 ** Description:
196 ** Creates an identifier, as a string, from a PRFileMap object
197 ** previously created with PR_OpenAnonFileMap().
199 ** Inputs:
200 ** fm -- PRFileMap pointer to be represented as a string.
201 ** bufsize -- sizeof(buf)
202 ** buf -- a buffer of length PR_FILEMAP_STRING_BUFSIZE
204 ** Outputs:
205 ** buf contains the stringized PRFileMap identifier
207 ** Returns:
208 ** PRStatus
211 NSPR_API( PRStatus )
212 PR_ExportFileMapAsString(
213 PRFileMap *fm,
214 PRSize bufsize,
215 char *buf
217 #define PR_FILEMAP_STRING_BUFSIZE 128
220 ** PR_ImportFileMapFromString() -- Creates a PRFileMap from the identifying string
222 ** Description:
223 ** PR_ImportFileMapFromString() creates a PRFileMap object from a
224 ** string previously created by PR_ExportFileMapAsString().
226 ** Inputs:
227 ** fmstring -- string created by PR_ExportFileMapAsString()
229 ** Returns:
230 ** PRFileMap pointer or NULL.
233 NSPR_API( PRFileMap * )
234 PR_ImportFileMapFromString(
235 const char *fmstring
238 PR_END_EXTERN_C
239 #endif /* prshma_h___ */