nsprpub/pr/include/prmem.h

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     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 ** File: prmem.h
     8 ** Description: API to NSPR memory management functions
     9 **
    10 */
    11 #ifndef prmem_h___
    12 #define prmem_h___
    14 #include "prtypes.h"
    15 #include <stdlib.h>
    17 PR_BEGIN_EXTERN_C
    19 /*
    20 ** Thread safe memory allocation.
    21 **
    22 ** NOTE: pr wraps up malloc, free, calloc, realloc so they are already
    23 ** thread safe (and are not declared here - look in stdlib.h).
    24 */
    26 /*
    27 ** PR_Malloc, PR_Calloc, PR_Realloc, and PR_Free have the same signatures
    28 ** as their libc equivalent malloc, calloc, realloc, and free, and have
    29 ** the same semantics.  (Note that the argument type size_t is replaced
    30 ** by PRUint32.)  Memory allocated by PR_Malloc, PR_Calloc, or PR_Realloc
    31 ** must be freed by PR_Free.
    32 */
    34 NSPR_API(void *) PR_Malloc(PRUint32 size);
    36 NSPR_API(void *) PR_Calloc(PRUint32 nelem, PRUint32 elsize);
    38 NSPR_API(void *) PR_Realloc(void *ptr, PRUint32 size);
    40 NSPR_API(void) PR_Free(void *ptr);
    42 /*
    43 ** The following are some convenience macros defined in terms of
    44 ** PR_Malloc, PR_Calloc, PR_Realloc, and PR_Free.
    45 */
    47 /***********************************************************************
    48 ** FUNCTION:	PR_MALLOC()
    49 ** DESCRIPTION:
    50 **   PR_NEW() allocates an untyped item of size _size from the heap.
    51 ** INPUTS:  _size: size in bytes of item to be allocated
    52 ** OUTPUTS:	untyped pointer to the node allocated
    53 ** RETURN:	pointer to node or error returned from malloc().
    54 ***********************************************************************/
    55 #define PR_MALLOC(_bytes) (PR_Malloc((_bytes)))
    57 /***********************************************************************
    58 ** FUNCTION:	PR_NEW()
    59 ** DESCRIPTION:
    60 **   PR_NEW() allocates an item of type _struct from the heap.
    61 ** INPUTS:  _struct: a data type
    62 ** OUTPUTS:	pointer to _struct
    63 ** RETURN:	pointer to _struct or error returns from malloc().
    64 ***********************************************************************/
    65 #define PR_NEW(_struct) ((_struct *) PR_MALLOC(sizeof(_struct)))
    67 /***********************************************************************
    68 ** FUNCTION:	PR_REALLOC()
    69 ** DESCRIPTION:
    70 **   PR_REALLOC() re-allocates _ptr bytes from the heap as a _size
    71 **   untyped item.
    72 ** INPUTS:	_ptr: pointer to node to reallocate
    73 **          _size: size of node to allocate
    74 ** OUTPUTS:	pointer to node allocated
    75 ** RETURN:	pointer to node allocated
    76 ***********************************************************************/
    77 #define PR_REALLOC(_ptr, _size) (PR_Realloc((_ptr), (_size)))
    79 /***********************************************************************
    80 ** FUNCTION:	PR_CALLOC()
    81 ** DESCRIPTION:
    82 **   PR_CALLOC() allocates a _size bytes untyped item from the heap
    83 **   and sets the allocated memory to all 0x00.
    84 ** INPUTS:	_size: size of node to allocate
    85 ** OUTPUTS:	pointer to node allocated
    86 ** RETURN:	pointer to node allocated
    87 ***********************************************************************/
    88 #define PR_CALLOC(_size) (PR_Calloc(1, (_size)))
    90 /***********************************************************************
    91 ** FUNCTION:	PR_NEWZAP()
    92 ** DESCRIPTION:
    93 **   PR_NEWZAP() allocates an item of type _struct from the heap
    94 **   and sets the allocated memory to all 0x00.
    95 ** INPUTS:	_struct: a data type
    96 ** OUTPUTS:	pointer to _struct
    97 ** RETURN:	pointer to _struct
    98 ***********************************************************************/
    99 #define PR_NEWZAP(_struct) ((_struct*)PR_Calloc(1, sizeof(_struct)))
   101 /***********************************************************************
   102 ** FUNCTION:	PR_DELETE()
   103 ** DESCRIPTION:
   104 **   PR_DELETE() unallocates an object previosly allocated via PR_NEW()
   105 **   or PR_NEWZAP() to the heap.
   106 ** INPUTS:	pointer to previously allocated object
   107 ** OUTPUTS:	the referenced object is returned to the heap
   108 ** RETURN:	void
   109 ***********************************************************************/
   110 #define PR_DELETE(_ptr) { PR_Free(_ptr); (_ptr) = NULL; }
   112 /***********************************************************************
   113 ** FUNCTION:	PR_FREEIF()
   114 ** DESCRIPTION:
   115 **   PR_FREEIF() conditionally unallocates an object previously allocated
   116 **   vial PR_NEW() or PR_NEWZAP(). If the pointer to the object is
   117 **   equal to zero (0), the object is not released.
   118 ** INPUTS:	pointer to previously allocated object
   119 ** OUTPUTS:	the referenced object is conditionally returned to the heap
   120 ** RETURN:	void
   121 ***********************************************************************/
   122 #define PR_FREEIF(_ptr)	if (_ptr) PR_DELETE(_ptr)
   124 PR_END_EXTERN_C
   126 #endif /* prmem_h___ */

mercurial