Annotation of sbbs/include/mozilla/nspr/prshma.h, revision 1.1

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) 1999-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 required 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: /*
        !            36: ** prshma.h -- NSPR Anonymous Shared Memory
        !            37: **
        !            38: ** NSPR provides an anonymous shared memory based on NSPR's PRFileMap
        !            39: ** type. The anonymous file-mapped shared memory provides an inheritable
        !            40: ** shared memory, as in: the child process inherits the shared memory.
        !            41: ** Compare the file-mapped anonymous shared memory to to a named shared
        !            42: ** memory described in prshm.h. The intent is to provide a shared
        !            43: ** memory that is accessable only by parent and child processes. ...
        !            44: ** It's a security thing.
        !            45: ** 
        !            46: ** Depending on the underlying platform, the file-mapped shared memory
        !            47: ** may be backed by a file. ... surprise! ... On some platforms, no
        !            48: ** real file backs the shared memory. On platforms where the shared
        !            49: ** memory is backed by a file, the file's name in the filesystem is
        !            50: ** visible to other processes for only the duration of the creation of
        !            51: ** the file, hopefully a very short time. This restricts processess
        !            52: ** that do not inherit the shared memory from opening the file and
        !            53: ** reading or writing its contents. Further, when all processes
        !            54: ** using an anonymous shared memory terminate, the backing file is
        !            55: ** deleted. ... If you are not paranoid, you're not paying attention.
        !            56: ** 
        !            57: ** The file-mapped shared memory requires a protocol for the parent
        !            58: ** process and child process to share the memory. NSPR provides two
        !            59: ** protocols. Use one or the other; don't mix and match.
        !            60: ** 
        !            61: ** In the first protocol, the job of passing the inheritable shared
        !            62: ** memory is done via helper-functions with PR_CreateProcess(). In the
        !            63: ** second protocol, the parent process is responsible for creating the
        !            64: ** child process; the parent and child are mutually responsible for
        !            65: ** passing a FileMap string. NSPR provides helper functions for
        !            66: ** extracting data from the PRFileMap object. ... See the examples
        !            67: ** below.
        !            68: ** 
        !            69: ** Both sides should adhere strictly to the protocol for proper
        !            70: ** operation. The pseudo-code below shows the use of a file-mapped
        !            71: ** shared memory by a parent and child processes. In the examples, the
        !            72: ** server creates the file-mapped shared memory, the client attaches to
        !            73: ** it.
        !            74: **
        !            75: ** First protocol.
        !            76: ** Server:
        !            77: **
        !            78: **   fm = PR_OpenAnonFileMap(dirName, size, FilemapProt); 
        !            79: **   addr = PR_MemMap(fm); 
        !            80: **   attr = PR_NewProcessAttr();
        !            81: **   PR_ProcessAttrSetInheritableFileMap( attr, fm, shmname );
        !            82: **   PR_CreateProcess(Client); 
        !            83: **   PR_DestroyProcessAttr(attr);
        !            84: **   ... yadda ...
        !            85: **   PR_MemUnmap( addr );
        !            86: **   PR_CloseFileMap(fm);
        !            87: **
        !            88: **
        !            89: ** Client: 
        !            90: **   ... started by server via PR_CreateProcess()
        !            91: **   fm = PR_GetInheritedFileMap( shmname );
        !            92: **   addr = PR_MemMap(fm);
        !            93: **   ... yadda ...
        !            94: **   PR_MemUnmap(addr);
        !            95: **   PR_CloseFileMap(fm);
        !            96: **
        !            97: **
        !            98: ** Second Protocol:
        !            99: ** Server:
        !           100: **
        !           101: **   fm = PR_OpenAnonFileMap(dirName, size, FilemapProt); 
        !           102: **   fmstring = PR_ExportFileMapAsString( fm );
        !           103: **   addr = PR_MemMap(fm); 
        !           104: **    ... application specific technique to pass fmstring to child
        !           105: **    ... yadda ... Server uses his own magic to create child
        !           106: **   PR_MemUnmap( addr );
        !           107: **   PR_CloseFileMap(fm);
        !           108: **
        !           109: **
        !           110: ** Client: 
        !           111: **   ... started by server via his own magic
        !           112: **   ... application specific technique to find fmstring from parent
        !           113: **   fm = PR_ImportFileMapFromString( fmstring )
        !           114: **   addr = PR_MemMap(fm);
        !           115: **   ... yadda ...
        !           116: **   PR_MemUnmap(addr);
        !           117: **   PR_CloseFileMap(fm);
        !           118: **
        !           119: **
        !           120: ** lth. 2-Jul-1999.
        !           121: **
        !           122: ** Note: The second protocol was requested by NelsonB (7/1999); this is
        !           123: ** to accomodate servers which already create their own child processes
        !           124: ** using platform native methods.
        !           125: ** 
        !           126: */
        !           127: 
        !           128: #ifndef prshma_h___
        !           129: #define prshma_h___
        !           130: 
        !           131: #include "prtypes.h"
        !           132: #include "prio.h"
        !           133: #include "prproces.h"
        !           134: 
        !           135: PR_BEGIN_EXTERN_C
        !           136: 
        !           137: /*
        !           138: ** PR_OpenAnonFileMap() -- Creates an anonymous file-mapped shared memory
        !           139: **
        !           140: ** Description:
        !           141: ** PR_OpenAnonFileMap() creates an anonymous shared memory. If the
        !           142: ** shared memory already exists, a handle is returned to that shared
        !           143: ** memory object.
        !           144: **
        !           145: ** On Unix platforms, PR_OpenAnonFileMap() uses 'dirName' as a
        !           146: ** directory name, without the trailing '/', to contain the anonymous
        !           147: ** file. A filename is generated for the name.
        !           148: **
        !           149: ** On Windows platforms, dirName is ignored.
        !           150: **
        !           151: ** Inputs:
        !           152: **   dirName -- A directory name to contain the anonymous file.
        !           153: **   size -- The size of the shared memory
        !           154: **   prot -- How the shared memory is mapped. See prio.h
        !           155: **   
        !           156: ** Outputs:
        !           157: **   PRFileMap *
        !           158: **
        !           159: ** Returns:
        !           160: **   Pointer to PRFileMap or NULL on error.
        !           161: **
        !           162: */
        !           163: NSPR_API( PRFileMap *)
        !           164: PR_OpenAnonFileMap(
        !           165:     const char *dirName,
        !           166:     PRSize      size, 
        !           167:     PRFileMapProtect prot
        !           168: );  
        !           169: 
        !           170: /*
        !           171: ** PR_ProcessAttrSetInheritableFileMap() -- Prepare FileMap for export  
        !           172: **   to my children processes via PR_CreateProcess()
        !           173: **
        !           174: ** Description:
        !           175: ** PR_ProcessAttrSetInheritableFileMap() connects the PRFileMap to
        !           176: ** PRProcessAttr with shmname. A subsequent call to PR_CreateProcess()
        !           177: ** makes the PRFileMap importable by the child process.
        !           178: **
        !           179: ** Inputs:
        !           180: **   attr -- PRProcessAttr, used to pass data to PR_CreateProcess()
        !           181: **   fm -- PRFileMap structure to be passed to the child process
        !           182: **   shmname -- The name for the PRFileMap; used by child.
        !           183: **
        !           184: ** Outputs:
        !           185: **   PRFileMap *
        !           186: **
        !           187: ** Returns:
        !           188: **   PRStatus
        !           189: **
        !           190: */
        !           191: NSPR_API(PRStatus) 
        !           192: PR_ProcessAttrSetInheritableFileMap( 
        !           193:     PRProcessAttr   *attr,
        !           194:     PRFileMap       *fm, 
        !           195:     const char      *shmname
        !           196: );
        !           197: 
        !           198: /*
        !           199: ** PR_GetInheritedFileMap() -- Import a PRFileMap previously exported
        !           200: **   by my parent process via PR_CreateProcess()
        !           201: **
        !           202: ** Description:
        !           203: ** PR_GetInheritedFileMap() retrieves a PRFileMap object exported from
        !           204: ** its parent process via PR_CreateProcess().
        !           205: **
        !           206: ** Inputs:
        !           207: **    shmname -- The name provided to PR_ProcessAttrSetInheritableFileMap()
        !           208: ** 
        !           209: ** Outputs:
        !           210: **   PRFileMap *
        !           211: **
        !           212: ** Returns:
        !           213: **   PRFileMap pointer or NULL.
        !           214: **
        !           215: */
        !           216: NSPR_API( PRFileMap *)
        !           217: PR_GetInheritedFileMap( 
        !           218:     const char *shmname 
        !           219: );
        !           220: 
        !           221: /*
        !           222: ** PR_ExportFileMapAsString() -- Creates a string identifying a PRFileMap
        !           223: **
        !           224: ** Description:
        !           225: ** Creates an identifier, as a string, from a PRFileMap object
        !           226: ** previously created with PR_OpenAnonFileMap().
        !           227: **
        !           228: ** Inputs:
        !           229: **   fm -- PRFileMap pointer to be represented as a string.
        !           230: **   bufsize -- sizeof(buf)
        !           231: **   buf -- a buffer of length PR_FILEMAP_STRING_BUFSIZE
        !           232: **
        !           233: ** Outputs:
        !           234: **   buf contains the stringized PRFileMap identifier
        !           235: **
        !           236: ** Returns:
        !           237: **   PRStatus
        !           238: **
        !           239: */
        !           240: NSPR_API( PRStatus )
        !           241: PR_ExportFileMapAsString( 
        !           242:     PRFileMap *fm,
        !           243:     PRSize    bufsize,
        !           244:     char      *buf
        !           245: );
        !           246: #define PR_FILEMAP_STRING_BUFSIZE 128
        !           247: 
        !           248: /*
        !           249: ** PR_ImportFileMapFromString() -- Creates a PRFileMap from the identifying string
        !           250: **
        !           251: ** Description:
        !           252: ** PR_ImportFileMapFromString() creates a PRFileMap object from a
        !           253: ** string previously created by PR_ExportFileMapAsString().
        !           254: **
        !           255: ** Inputs:
        !           256: **   fmstring -- string created by PR_ExportFileMapAsString()
        !           257: **
        !           258: ** Returns:
        !           259: **   PRFileMap pointer or NULL.
        !           260: **
        !           261: */
        !           262: NSPR_API( PRFileMap * )
        !           263: PR_ImportFileMapFromString( 
        !           264:     const char *fmstring
        !           265: );
        !           266: 
        !           267: PR_END_EXTERN_C
        !           268: #endif /* prshma_h___ */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.