COSMOS core  1.0.2 (beta)
Comprehensive Open-architecture Solution for Mission Operations Systems
pngmem.c File Reference
#include "pngpriv.h"
Include dependency graph for pngmem.c:

Functions

void png_destroy_png_struct (png_structrp png_ptr)
 
png_voidp png_calloc (png_const_structrp png_ptr, png_alloc_size_t size)
 
png_voidp png_malloc_base (png_const_structrp png_ptr, png_alloc_size_t size)
 
static png_voidp png_malloc_array_checked (png_const_structrp png_ptr, int nelements, size_t element_size)
 
png_voidp png_malloc_array (png_const_structrp png_ptr, int nelements, size_t element_size)
 
png_voidp png_realloc_array (png_const_structrp png_ptr, png_const_voidp old_array, int old_elements, int add_elements, size_t element_size)
 
png_voidp png_malloc (png_const_structrp png_ptr, png_alloc_size_t size)
 
png_voidp png_malloc_default (png_const_structrp png_ptr, png_alloc_size_t size)
 
png_voidp png_malloc_warn (png_const_structrp png_ptr, png_alloc_size_t size)
 
void png_free (png_const_structrp png_ptr, png_voidp ptr)
 
void png_free_default (png_const_structrp png_ptr, png_voidp ptr)
 
void png_set_mem_fn (png_structrp png_ptr, png_voidp mem_ptr, png_malloc_ptr malloc_fn, png_free_ptr free_fn)
 
png_voidp png_get_mem_ptr (png_const_structrp png_ptr)
 

Function Documentation

void png_destroy_png_struct ( png_structrp  png_ptr)
26 {
27  if (png_ptr != NULL)
28  {
29  /* png_free might call png_error and may certainly call
30  * png_get_mem_ptr, so fake a temporary png_struct to support this.
31  */
32  png_struct dummy_struct = *png_ptr;
33  memset(png_ptr, 0, (sizeof *png_ptr));
34  png_free(&dummy_struct, png_ptr);
35 
36 # ifdef PNG_SETJMP_SUPPORTED
37  /* We may have a jmp_buf left to deallocate. */
38  png_free_jmpbuf(&dummy_struct);
39 # endif
40  }
41 }
Definition: pngstruct.h:144
void png_free(png_const_structrp png_ptr, png_voidp ptr)
Definition: pngmem.c:229
void png_free_jmpbuf(png_structrp png_ptr)
Definition: pngerror.c:666
png_voidp png_calloc ( png_const_structrp  png_ptr,
png_alloc_size_t  size 
)
51 {
52  png_voidp ret;
53 
54  ret = png_malloc(png_ptr, size);
55 
56  if (ret != NULL)
57  memset(ret, 0, size);
58 
59  return ret;
60 }
void * png_voidp
Definition: pngconf.h:598
png_voidp png_malloc(png_const_structrp png_ptr, png_alloc_size_t size)
Definition: pngmem.c:169
png_voidp png_malloc_base ( png_const_structrp  png_ptr,
png_alloc_size_t  size 
)
70 {
71  /* Moved to png_malloc_base from png_malloc_default in 1.6.0; the DOS
72  * allocators have also been removed in 1.6.0, so any 16-bit system now has
73  * to implement a user memory handler. This checks to be sure it isn't
74  * called with big numbers.
75  */
76 #ifndef PNG_USER_MEM_SUPPORTED
77  PNG_UNUSED(png_ptr)
78 #endif
79 
80  if (size > 0 && size <= PNG_SIZE_MAX
81 # ifdef PNG_MAX_MALLOC_64K
82  && size <= 65536U
83 # endif
84  )
85  {
86 #ifdef PNG_USER_MEM_SUPPORTED
87  if (png_ptr != NULL && png_ptr->malloc_fn != NULL)
88  return png_ptr->malloc_fn(png_constcast(png_structrp,png_ptr), size);
89 
90  else
91 #endif
92  return malloc((size_t)size); /* checked for truncation above */
93  }
94 
95  else
96  return NULL;
97 }
#define PNG_UNUSED(param)
Definition: pngpriv.h:367
Definition: pngstruct.h:144
#define PNG_SIZE_MAX
Definition: png.h:792
#define png_constcast(type, value)
Definition: pngpriv.h:409
static png_voidp png_malloc_array_checked ( png_const_structrp  png_ptr,
int  nelements,
size_t  element_size 
)
static
108 {
109  png_alloc_size_t req = nelements; /* known to be > 0 */
110 
111  if (req <= PNG_SIZE_MAX/element_size)
112  return png_malloc_base(png_ptr, req * element_size);
113 
114  /* The failure case when the request is too large */
115  return NULL;
116 }
png_voidp png_malloc_base(png_const_structrp png_ptr, png_alloc_size_t size)
Definition: pngmem.c:69
png_size_t png_alloc_size_t
Definition: pngconf.h:578
#define PNG_SIZE_MAX
Definition: png.h:792
png_voidp png_malloc_array ( png_const_structrp  png_ptr,
int  nelements,
size_t  element_size 
)
121 {
122  if (nelements <= 0 || element_size == 0)
123  png_error(png_ptr, "internal error: array alloc");
124 
125  return png_malloc_array_checked(png_ptr, nelements, element_size);
126 }
static png_voidp png_malloc_array_checked(png_const_structrp png_ptr, int nelements, size_t element_size)
Definition: pngmem.c:106
PNG_IMPEXP void() png_error(png_const_structrp png_ptr, png_const_charp error_message)
Definition: pngerror.c:40
png_voidp png_realloc_array ( png_const_structrp  png_ptr,
png_const_voidp  old_array,
int  old_elements,
int  add_elements,
size_t  element_size 
)
131 {
132  /* These are internal errors: */
133  if (add_elements <= 0 || element_size == 0 || old_elements < 0 ||
134  (old_array == NULL && old_elements > 0))
135  png_error(png_ptr, "internal error: array realloc");
136 
137  /* Check for overflow on the elements count (so the caller does not have to
138  * check.)
139  */
140  if (add_elements <= INT_MAX - old_elements)
141  {
142  png_voidp new_array = png_malloc_array_checked(png_ptr,
143  old_elements+add_elements, element_size);
144 
145  if (new_array != NULL)
146  {
147  /* Because png_malloc_array worked the size calculations below cannot
148  * overflow.
149  */
150  if (old_elements > 0)
151  memcpy(new_array, old_array, element_size*(unsigned)old_elements);
152 
153  memset((char*)new_array + element_size*(unsigned)old_elements, 0,
154  element_size*(unsigned)add_elements);
155 
156  return new_array;
157  }
158  }
159 
160  return NULL; /* error */
161 }
static png_voidp png_malloc_array_checked(png_const_structrp png_ptr, int nelements, size_t element_size)
Definition: pngmem.c:106
void * png_voidp
Definition: pngconf.h:598
PNG_IMPEXP void() png_error(png_const_structrp png_ptr, png_const_charp error_message)
Definition: pngerror.c:40
png_voidp png_malloc ( png_const_structrp  png_ptr,
png_alloc_size_t  size 
)
170 {
171  png_voidp ret;
172 
173  if (png_ptr == NULL)
174  return NULL;
175 
176  ret = png_malloc_base(png_ptr, size);
177 
178  if (ret == NULL)
179  png_error(png_ptr, "Out of memory"); /* 'm' means png_malloc */
180 
181  return ret;
182 }
void * png_voidp
Definition: pngconf.h:598
png_voidp png_malloc_base(png_const_structrp png_ptr, png_alloc_size_t size)
Definition: pngmem.c:69
PNG_IMPEXP void() png_error(png_const_structrp png_ptr, png_const_charp error_message)
Definition: pngerror.c:40
png_voidp png_malloc_default ( png_const_structrp  png_ptr,
png_alloc_size_t  size 
)
188 {
189  png_voidp ret;
190 
191  if (png_ptr == NULL)
192  return NULL;
193 
194  /* Passing 'NULL' here bypasses the application provided memory handler. */
195  ret = png_malloc_base(NULL/*use malloc*/, size);
196 
197  if (ret == NULL)
198  png_error(png_ptr, "Out of Memory"); /* 'M' means png_malloc_default */
199 
200  return ret;
201 }
void * png_voidp
Definition: pngconf.h:598
png_voidp png_malloc_base(png_const_structrp png_ptr, png_alloc_size_t size)
Definition: pngmem.c:69
PNG_IMPEXP void() png_error(png_const_structrp png_ptr, png_const_charp error_message)
Definition: pngerror.c:40
png_voidp png_malloc_warn ( png_const_structrp  png_ptr,
png_alloc_size_t  size 
)
211 {
212  if (png_ptr != NULL)
213  {
214  png_voidp ret = png_malloc_base(png_ptr, size);
215 
216  if (ret != NULL)
217  return ret;
218 
219  png_warning(png_ptr, "Out of memory");
220  }
221 
222  return NULL;
223 }
void * png_voidp
Definition: pngconf.h:598
PNG_IMPEXP void() png_warning(png_const_structrp png_ptr, png_const_charp warning_message)
Definition: pngerror.c:216
png_voidp png_malloc_base(png_const_structrp png_ptr, png_alloc_size_t size)
Definition: pngmem.c:69
void png_free ( png_const_structrp  png_ptr,
png_voidp  ptr 
)
230 {
231  if (png_ptr == NULL || ptr == NULL)
232  return;
233 
234 #ifdef PNG_USER_MEM_SUPPORTED
235  if (png_ptr->free_fn != NULL)
236  png_ptr->free_fn(png_constcast(png_structrp,png_ptr), ptr);
237 
238  else
239  png_free_default(png_ptr, ptr);
240 }
Definition: pngstruct.h:144
void png_free_default(png_const_structrp png_ptr, png_voidp ptr)
Definition: pngmem.c:243
#define png_constcast(type, value)
Definition: pngpriv.h:409
void png_free_default ( png_const_structrp  png_ptr,
png_voidp  ptr 
)
244 {
245  if (png_ptr == NULL || ptr == NULL)
246  return;
247 #endif /* USER_MEM */
248 
249  free(ptr);
250 }
void png_set_mem_fn ( png_structrp  png_ptr,
png_voidp  mem_ptr,
png_malloc_ptr  malloc_fn,
png_free_ptr  free_fn 
)
259 {
260  if (png_ptr != NULL)
261  {
262  png_ptr->mem_ptr = mem_ptr;
263  png_ptr->malloc_fn = malloc_fn;
264  png_ptr->free_fn = free_fn;
265  }
266 }
png_voidp png_get_mem_ptr ( png_const_structrp  png_ptr)
274 {
275  if (png_ptr == NULL)
276  return NULL;
277 
278  return png_ptr->mem_ptr;
279 }