21#if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
24png_destroy_png_struct(png_structrp png_ptr)
31 png_struct dummy_struct = *png_ptr;
32 memset(png_ptr, 0, (
sizeof *png_ptr));
33 png_free(&dummy_struct, png_ptr);
35# ifdef PNG_SETJMP_SUPPORTED
37 png_free_jmpbuf(&dummy_struct);
48PNG_FUNCTION(png_voidp,PNGAPI
49png_calloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
53 ret = png_malloc(png_ptr, size);
66PNG_FUNCTION(png_voidp ,
67png_malloc_base,(png_const_structrp png_ptr, png_alloc_size_t size),
75# ifdef PNG_MAX_MALLOC_64K
82 if (size > 65536U)
return NULL;
87 if (size > PNG_SIZE_MAX)
return NULL;
89# ifdef PNG_USER_MEM_SUPPORTED
90 if (png_ptr != NULL && png_ptr->malloc_fn != NULL)
91 return png_ptr->malloc_fn(png_constcast(png_structrp,png_ptr), size);
97 return malloc((
size_t)size);
100#if defined(PNG_TEXT_SUPPORTED) || defined(PNG_sPLT_SUPPORTED) ||\
101 defined(PNG_STORE_UNKNOWN_CHUNKS_SUPPORTED)
107png_malloc_array_checked(png_const_structrp png_ptr,
int nelements,
110 png_alloc_size_t req = (png_alloc_size_t)nelements;
112 if (req <= PNG_SIZE_MAX/element_size)
113 return png_malloc_base(png_ptr, req * element_size);
119PNG_FUNCTION(png_voidp ,
120png_malloc_array,(png_const_structrp png_ptr,
int nelements,
121 size_t element_size),PNG_ALLOCATED)
123 if (nelements <= 0 || element_size == 0)
124 png_error(png_ptr,
"internal error: array alloc");
126 return png_malloc_array_checked(png_ptr, nelements, element_size);
129PNG_FUNCTION(png_voidp ,
130png_realloc_array,(png_const_structrp png_ptr, png_const_voidp old_array,
131 int old_elements,
int add_elements,
size_t element_size),PNG_ALLOCATED)
134 if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
135 (old_array == NULL && old_elements > 0))
136 png_error(png_ptr,
"internal error: array realloc");
141 if (add_elements <= INT_MAX - old_elements)
143 png_voidp new_array = png_malloc_array_checked(png_ptr,
144 old_elements+add_elements, element_size);
146 if (new_array != NULL)
151 if (old_elements > 0)
152 memcpy(new_array, old_array, element_size*(
unsigned)old_elements);
154 memset((
char*)new_array + element_size*(
unsigned)old_elements, 0,
155 element_size*(
unsigned)add_elements);
169PNG_FUNCTION(png_voidp,PNGAPI
170png_malloc,(png_const_structrp png_ptr, png_alloc_size_t size),PNG_ALLOCATED)
177 ret = png_malloc_base(png_ptr, size);
180 png_error(png_ptr,
"Out of memory");
185#ifdef PNG_USER_MEM_SUPPORTED
186PNG_FUNCTION(png_voidp,PNGAPI
187png_malloc_default,(png_const_structrp png_ptr, png_alloc_size_t size),
188 PNG_ALLOCATED PNG_DEPRECATED)
196 ret = png_malloc_base(NULL, size);
199 png_error(png_ptr,
"Out of Memory");
209PNG_FUNCTION(png_voidp,PNGAPI
210png_malloc_warn,(png_const_structrp png_ptr, png_alloc_size_t size),
215 png_voidp ret = png_malloc_base(png_ptr, size);
220 png_warning(png_ptr,
"Out of memory");
230png_free(png_const_structrp png_ptr, png_voidp ptr)
232 if (png_ptr == NULL || ptr == NULL)
235#ifdef PNG_USER_MEM_SUPPORTED
236 if (png_ptr->free_fn != NULL)
237 png_ptr->free_fn(png_constcast(png_structrp,png_ptr), ptr);
240 png_free_default(png_ptr, ptr);
243PNG_FUNCTION(
void,PNGAPI
244png_free_default,(png_const_structrp png_ptr, png_voidp ptr),PNG_DEPRECATED)
246 if (png_ptr == NULL || ptr == NULL)
253#ifdef PNG_USER_MEM_SUPPORTED
258png_set_mem_fn(png_structrp png_ptr, png_voidp mem_ptr, png_malloc_ptr
259 malloc_fn, png_free_ptr free_fn)
263 png_ptr->mem_ptr = mem_ptr;
264 png_ptr->malloc_fn = malloc_fn;
265 png_ptr->free_fn = free_fn;
274png_get_mem_ptr(png_const_structrp png_ptr)
279 return png_ptr->mem_ptr;