1 #include <libexif/exif-mem.h>
6 unsigned int ref_count;
7 ExifMemAllocFunc alloc_func;
8 ExifMemReallocFunc realloc_func;
9 ExifMemFreeFunc free_func;
12 /*! Default memory allocation function. */
14 exif_mem_alloc_func (ExifLong ds)
16 return calloc ((size_t) ds, 1);
19 /*! Default memory reallocation function. */
21 exif_mem_realloc_func (void *d, ExifLong ds)
23 return realloc (d, (size_t) ds);
26 /*! Default memory free function. */
28 exif_mem_free_func (void *d)
34 exif_mem_new (ExifMemAllocFunc alloc_func, ExifMemReallocFunc realloc_func,
35 ExifMemFreeFunc free_func)
39 if (!alloc_func && !realloc_func)
41 mem = alloc_func ? alloc_func (sizeof (ExifMem)) :
42 realloc_func (NULL, sizeof (ExifMem));
43 if (!mem) return NULL;
46 mem->alloc_func = alloc_func;
47 mem->realloc_func = realloc_func;
48 mem->free_func = free_func;
54 exif_mem_ref (ExifMem *mem)
61 exif_mem_unref (ExifMem *mem)
64 if (!--mem->ref_count)
65 exif_mem_free (mem, mem);
69 exif_mem_free (ExifMem *mem, void *d)
79 exif_mem_alloc (ExifMem *mem, ExifLong ds)
81 if (!mem) return NULL;
82 if (mem->alloc_func || mem->realloc_func)
83 return mem->alloc_func ? mem->alloc_func (ds) :
84 mem->realloc_func (NULL, ds);
89 exif_mem_realloc (ExifMem *mem, void *d, ExifLong ds)
91 return (mem && mem->realloc_func) ? mem->realloc_func (d, ds) : NULL;
95 exif_mem_new_default (void)
97 return exif_mem_new (exif_mem_alloc_func, exif_mem_realloc_func,