tor-browser

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

mem.h (4542B)


      1 /*
      2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
      3 *
      4 * This file is part of Libav.
      5 *
      6 * Libav is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public
      8 * License as published by the Free Software Foundation; either
      9 * version 2.1 of the License, or (at your option) any later version.
     10 *
     11 * Libav is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14 * Lesser General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU Lesser General Public
     17 * License along with Libav; if not, write to the Free Software
     18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     19 */
     20 
     21 /**
     22 * @file
     23 * memory handling functions
     24 */
     25 
     26 #ifndef AVUTIL_MEM_H
     27 #define AVUTIL_MEM_H
     28 
     29 #include "attributes.h"
     30 #include "avutil.h"
     31 
     32 /**
     33 * @addtogroup lavu_mem
     34 * @{
     35 */
     36 
     37 
     38 #if defined(__ICC) && _ICC < 1200 || defined(__SUNPRO_C)
     39    #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (n))) v
     40    #define DECLARE_ASM_CONST(n,t,v)    const t __attribute__ ((aligned (n))) v
     41 #elif defined(__TI_COMPILER_VERSION__)
     42    #define DECLARE_ALIGNED(n,t,v)                      \
     43        AV_PRAGMA(DATA_ALIGN(v,n))                      \
     44        t __attribute__((aligned(n))) v
     45    #define DECLARE_ASM_CONST(n,t,v)                    \
     46        AV_PRAGMA(DATA_ALIGN(v,n))                      \
     47        static const t __attribute__((aligned(n))) v
     48 #elif defined(__GNUC__)
     49    #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (n))) v
     50    #define DECLARE_ASM_CONST(n,t,v)    static const t av_used __attribute__ ((aligned (n))) v
     51 #elif defined(_MSC_VER)
     52    #define DECLARE_ALIGNED(n,t,v)      __declspec(align(n)) t v
     53    #define DECLARE_ASM_CONST(n,t,v)    __declspec(align(n)) static const t v
     54 #else
     55    #define DECLARE_ALIGNED(n,t,v)      t v
     56    #define DECLARE_ASM_CONST(n,t,v)    static const t v
     57 #endif
     58 
     59 #if AV_GCC_VERSION_AT_LEAST(3,1)
     60    #define av_malloc_attrib __attribute__((__malloc__))
     61 #else
     62    #define av_malloc_attrib
     63 #endif
     64 
     65 #if AV_GCC_VERSION_AT_LEAST(4,3)
     66    #define av_alloc_size(n) __attribute__((alloc_size(n)))
     67 #else
     68    #define av_alloc_size(n)
     69 #endif
     70 
     71 /**
     72 * Allocate a block of size bytes with alignment suitable for all
     73 * memory accesses (including vectors if available on the CPU).
     74 * @param size Size in bytes for the memory block to be allocated.
     75 * @return Pointer to the allocated block, NULL if the block cannot
     76 * be allocated.
     77 * @see av_mallocz()
     78 */
     79 void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
     80 
     81 /**
     82 * Allocate or reallocate a block of memory.
     83 * If ptr is NULL and size > 0, allocate a new block. If
     84 * size is zero, free the memory block pointed to by ptr.
     85 * @param ptr Pointer to a memory block already allocated with
     86 * av_malloc(z)() or av_realloc() or NULL.
     87 * @param size Size in bytes for the memory block to be allocated or
     88 * reallocated.
     89 * @return Pointer to a newly reallocated block or NULL if the block
     90 * cannot be reallocated or the function is used to free the memory block.
     91 * @see av_fast_realloc()
     92 */
     93 void *av_realloc(void *ptr, size_t size) av_alloc_size(2);
     94 
     95 /**
     96 * Free a memory block which has been allocated with av_malloc(z)() or
     97 * av_realloc().
     98 * @param ptr Pointer to the memory block which should be freed.
     99 * @note ptr = NULL is explicitly allowed.
    100 * @note It is recommended that you use av_freep() instead.
    101 * @see av_freep()
    102 */
    103 void av_free(void *ptr);
    104 
    105 /**
    106 * Allocate a block of size bytes with alignment suitable for all
    107 * memory accesses (including vectors if available on the CPU) and
    108 * zero all the bytes of the block.
    109 * @param size Size in bytes for the memory block to be allocated.
    110 * @return Pointer to the allocated block, NULL if it cannot be allocated.
    111 * @see av_malloc()
    112 */
    113 void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1);
    114 
    115 /**
    116 * Duplicate the string s.
    117 * @param s string to be duplicated
    118 * @return Pointer to a newly allocated string containing a
    119 * copy of s or NULL if the string cannot be allocated.
    120 */
    121 char *av_strdup(const char *s) av_malloc_attrib;
    122 
    123 /**
    124 * Free a memory block which has been allocated with av_malloc(z)() or
    125 * av_realloc() and set the pointer pointing to it to NULL.
    126 * @param ptr Pointer to the pointer to the memory block which should
    127 * be freed.
    128 * @see av_free()
    129 */
    130 void av_freep(void *ptr);
    131 
    132 /**
    133 * @}
    134 */
    135 
    136 #endif /* AVUTIL_MEM_H */