tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

prmem.h (4760B)


      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 /*
      7 ** File: prmem.h
      8 ** Description: API to NSPR memory management functions
      9 **
     10 */
     11 #ifndef prmem_h___
     12 #define prmem_h___
     13 
     14 #include "prtypes.h"
     15 #include <stdlib.h>
     16 
     17 PR_BEGIN_EXTERN_C
     18 
     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 */
     25 
     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 */
     33 
     34 NSPR_API(void *) PR_Malloc(PRUint32 size);
     35 
     36 NSPR_API(void *) PR_Calloc(PRUint32 nelem, PRUint32 elsize);
     37 
     38 NSPR_API(void *) PR_Realloc(void *ptr, PRUint32 size);
     39 
     40 NSPR_API(void) PR_Free(void *ptr);
     41 
     42 /*
     43 ** The following are some convenience macros defined in terms of
     44 ** PR_Malloc, PR_Calloc, PR_Realloc, and PR_Free.
     45 */
     46 
     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)))
     56 
     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)))
     66 
     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)))
     78 
     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)))
     89 
     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)))
    100 
    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; }
    111 
    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)
    123 
    124 PR_END_EXTERN_C
    125 
    126 #endif /* prmem_h___ */