Dependencies:   emwin_lib

Fork of DMemWin by Embedded Artists

Committer:
destinyXfate
Date:
Thu Jun 02 04:55:08 2016 +0000
Revision:
4:20387dbf7ecf
Parent:
2:0e2ef1edf01b
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
destinyXfate 2:0e2ef1edf01b 1
destinyXfate 2:0e2ef1edf01b 2 /* pngmem.c - stub functions for memory allocation
destinyXfate 2:0e2ef1edf01b 3 *
destinyXfate 2:0e2ef1edf01b 4 * Last changed in libpng 1.2.13 November 13, 2006
destinyXfate 2:0e2ef1edf01b 5 * For conditions of distribution and use, see copyright notice in png.h
destinyXfate 2:0e2ef1edf01b 6 * Copyright (c) 1998-2006 Glenn Randers-Pehrson
destinyXfate 2:0e2ef1edf01b 7 * (Version 0.96 Copyright (c) 1996, 1997 Andreas Dilger)
destinyXfate 2:0e2ef1edf01b 8 * (Version 0.88 Copyright (c) 1995, 1996 Guy Eric Schalnat, Group 42, Inc.)
destinyXfate 2:0e2ef1edf01b 9 *
destinyXfate 2:0e2ef1edf01b 10 * This file provides a location for all memory allocation. Users who
destinyXfate 2:0e2ef1edf01b 11 * need special memory handling are expected to supply replacement
destinyXfate 2:0e2ef1edf01b 12 * functions for png_malloc() and png_free(), and to use
destinyXfate 2:0e2ef1edf01b 13 * png_create_read_struct_2() and png_create_write_struct_2() to
destinyXfate 2:0e2ef1edf01b 14 * identify the replacement functions.
destinyXfate 2:0e2ef1edf01b 15 */
destinyXfate 2:0e2ef1edf01b 16
destinyXfate 2:0e2ef1edf01b 17 #define PNG_INTERNAL
destinyXfate 2:0e2ef1edf01b 18 #include "png.h"
destinyXfate 2:0e2ef1edf01b 19
destinyXfate 2:0e2ef1edf01b 20 #if defined(PNG_READ_SUPPORTED) || defined(PNG_WRITE_SUPPORTED)
destinyXfate 2:0e2ef1edf01b 21
destinyXfate 2:0e2ef1edf01b 22 /* Borland DOS special memory handler */
destinyXfate 2:0e2ef1edf01b 23 #if defined(__TURBOC__) && !defined(_Windows) && !defined(__FLAT__)
destinyXfate 2:0e2ef1edf01b 24 /* if you change this, be sure to change the one in png.h also */
destinyXfate 2:0e2ef1edf01b 25
destinyXfate 2:0e2ef1edf01b 26 /* Allocate memory for a png_struct. The malloc and memset can be replaced
destinyXfate 2:0e2ef1edf01b 27 by a single call to calloc() if this is thought to improve performance. */
destinyXfate 2:0e2ef1edf01b 28 png_voidp /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 29 png_create_struct(int type)
destinyXfate 2:0e2ef1edf01b 30 {
destinyXfate 2:0e2ef1edf01b 31 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 32 return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL));
destinyXfate 2:0e2ef1edf01b 33 }
destinyXfate 2:0e2ef1edf01b 34
destinyXfate 2:0e2ef1edf01b 35 /* Alternate version of png_create_struct, for use with user-defined malloc. */
destinyXfate 2:0e2ef1edf01b 36 png_voidp /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 37 png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
destinyXfate 2:0e2ef1edf01b 38 {
destinyXfate 2:0e2ef1edf01b 39 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 40 png_size_t size;
destinyXfate 2:0e2ef1edf01b 41 png_voidp struct_ptr;
destinyXfate 2:0e2ef1edf01b 42
destinyXfate 2:0e2ef1edf01b 43 if (type == PNG_STRUCT_INFO)
destinyXfate 2:0e2ef1edf01b 44 size = png_sizeof(png_info);
destinyXfate 2:0e2ef1edf01b 45 else if (type == PNG_STRUCT_PNG)
destinyXfate 2:0e2ef1edf01b 46 size = png_sizeof(png_struct);
destinyXfate 2:0e2ef1edf01b 47 else
destinyXfate 2:0e2ef1edf01b 48 return (png_get_copyright(NULL));
destinyXfate 2:0e2ef1edf01b 49
destinyXfate 2:0e2ef1edf01b 50 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 51 if(malloc_fn != NULL)
destinyXfate 2:0e2ef1edf01b 52 {
destinyXfate 2:0e2ef1edf01b 53 png_struct dummy_struct;
destinyXfate 2:0e2ef1edf01b 54 png_structp png_ptr = &dummy_struct;
destinyXfate 2:0e2ef1edf01b 55 png_ptr->mem_ptr=mem_ptr;
destinyXfate 2:0e2ef1edf01b 56 struct_ptr = (*(malloc_fn))(png_ptr, (png_uint_32)size);
destinyXfate 2:0e2ef1edf01b 57 }
destinyXfate 2:0e2ef1edf01b 58 else
destinyXfate 2:0e2ef1edf01b 59 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 60 struct_ptr = (png_voidp)farmalloc(size);
destinyXfate 2:0e2ef1edf01b 61 if (struct_ptr != NULL)
destinyXfate 2:0e2ef1edf01b 62 png_memset(struct_ptr, 0, size);
destinyXfate 2:0e2ef1edf01b 63 return (struct_ptr);
destinyXfate 2:0e2ef1edf01b 64 }
destinyXfate 2:0e2ef1edf01b 65
destinyXfate 2:0e2ef1edf01b 66 /* Free memory allocated by a png_create_struct() call */
destinyXfate 2:0e2ef1edf01b 67 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 68 png_destroy_struct(png_voidp struct_ptr)
destinyXfate 2:0e2ef1edf01b 69 {
destinyXfate 2:0e2ef1edf01b 70 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 71 png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL);
destinyXfate 2:0e2ef1edf01b 72 }
destinyXfate 2:0e2ef1edf01b 73
destinyXfate 2:0e2ef1edf01b 74 /* Free memory allocated by a png_create_struct() call */
destinyXfate 2:0e2ef1edf01b 75 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 76 png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
destinyXfate 2:0e2ef1edf01b 77 png_voidp mem_ptr)
destinyXfate 2:0e2ef1edf01b 78 {
destinyXfate 2:0e2ef1edf01b 79 #endif
destinyXfate 2:0e2ef1edf01b 80 if (struct_ptr != NULL)
destinyXfate 2:0e2ef1edf01b 81 {
destinyXfate 2:0e2ef1edf01b 82 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 83 if(free_fn != NULL)
destinyXfate 2:0e2ef1edf01b 84 {
destinyXfate 2:0e2ef1edf01b 85 png_struct dummy_struct;
destinyXfate 2:0e2ef1edf01b 86 png_structp png_ptr = &dummy_struct;
destinyXfate 2:0e2ef1edf01b 87 png_ptr->mem_ptr=mem_ptr;
destinyXfate 2:0e2ef1edf01b 88 (*(free_fn))(png_ptr, struct_ptr);
destinyXfate 2:0e2ef1edf01b 89 return;
destinyXfate 2:0e2ef1edf01b 90 }
destinyXfate 2:0e2ef1edf01b 91 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 92 farfree (struct_ptr);
destinyXfate 2:0e2ef1edf01b 93 }
destinyXfate 2:0e2ef1edf01b 94 }
destinyXfate 2:0e2ef1edf01b 95
destinyXfate 2:0e2ef1edf01b 96 /* Allocate memory. For reasonable files, size should never exceed
destinyXfate 2:0e2ef1edf01b 97 * 64K. However, zlib may allocate more then 64K if you don't tell
destinyXfate 2:0e2ef1edf01b 98 * it not to. See zconf.h and png.h for more information. zlib does
destinyXfate 2:0e2ef1edf01b 99 * need to allocate exactly 64K, so whatever you call here must
destinyXfate 2:0e2ef1edf01b 100 * have the ability to do that.
destinyXfate 2:0e2ef1edf01b 101 *
destinyXfate 2:0e2ef1edf01b 102 * Borland seems to have a problem in DOS mode for exactly 64K.
destinyXfate 2:0e2ef1edf01b 103 * It gives you a segment with an offset of 8 (perhaps to store its
destinyXfate 2:0e2ef1edf01b 104 * memory stuff). zlib doesn't like this at all, so we have to
destinyXfate 2:0e2ef1edf01b 105 * detect and deal with it. This code should not be needed in
destinyXfate 2:0e2ef1edf01b 106 * Windows or OS/2 modes, and only in 16 bit mode. This code has
destinyXfate 2:0e2ef1edf01b 107 * been updated by Alexander Lehmann for version 0.89 to waste less
destinyXfate 2:0e2ef1edf01b 108 * memory.
destinyXfate 2:0e2ef1edf01b 109 *
destinyXfate 2:0e2ef1edf01b 110 * Note that we can't use png_size_t for the "size" declaration,
destinyXfate 2:0e2ef1edf01b 111 * since on some systems a png_size_t is a 16-bit quantity, and as a
destinyXfate 2:0e2ef1edf01b 112 * result, we would be truncating potentially larger memory requests
destinyXfate 2:0e2ef1edf01b 113 * (which should cause a fatal error) and introducing major problems.
destinyXfate 2:0e2ef1edf01b 114 */
destinyXfate 2:0e2ef1edf01b 115
destinyXfate 2:0e2ef1edf01b 116 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 117 png_malloc(png_structp png_ptr, png_uint_32 size)
destinyXfate 2:0e2ef1edf01b 118 {
destinyXfate 2:0e2ef1edf01b 119 png_voidp ret;
destinyXfate 2:0e2ef1edf01b 120
destinyXfate 2:0e2ef1edf01b 121 if (png_ptr == NULL || size == 0)
destinyXfate 2:0e2ef1edf01b 122 return (NULL);
destinyXfate 2:0e2ef1edf01b 123
destinyXfate 2:0e2ef1edf01b 124 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 125 if(png_ptr->malloc_fn != NULL)
destinyXfate 2:0e2ef1edf01b 126 ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
destinyXfate 2:0e2ef1edf01b 127 else
destinyXfate 2:0e2ef1edf01b 128 ret = (png_malloc_default(png_ptr, size));
destinyXfate 2:0e2ef1edf01b 129 if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 130 png_error(png_ptr, "Out of memory!");
destinyXfate 2:0e2ef1edf01b 131 return (ret);
destinyXfate 2:0e2ef1edf01b 132 }
destinyXfate 2:0e2ef1edf01b 133
destinyXfate 2:0e2ef1edf01b 134 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 135 png_malloc_default(png_structp png_ptr, png_uint_32 size)
destinyXfate 2:0e2ef1edf01b 136 {
destinyXfate 2:0e2ef1edf01b 137 png_voidp ret;
destinyXfate 2:0e2ef1edf01b 138 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 139
destinyXfate 2:0e2ef1edf01b 140 if (png_ptr == NULL || size == 0)
destinyXfate 2:0e2ef1edf01b 141 return (NULL);
destinyXfate 2:0e2ef1edf01b 142
destinyXfate 2:0e2ef1edf01b 143 #ifdef PNG_MAX_MALLOC_64K
destinyXfate 2:0e2ef1edf01b 144 if (size > (png_uint_32)65536L)
destinyXfate 2:0e2ef1edf01b 145 {
destinyXfate 2:0e2ef1edf01b 146 png_warning(png_ptr, "Cannot Allocate > 64K");
destinyXfate 2:0e2ef1edf01b 147 ret = NULL;
destinyXfate 2:0e2ef1edf01b 148 }
destinyXfate 2:0e2ef1edf01b 149 else
destinyXfate 2:0e2ef1edf01b 150 #endif
destinyXfate 2:0e2ef1edf01b 151
destinyXfate 2:0e2ef1edf01b 152 if (size != (size_t)size)
destinyXfate 2:0e2ef1edf01b 153 ret = NULL;
destinyXfate 2:0e2ef1edf01b 154 else if (size == (png_uint_32)65536L)
destinyXfate 2:0e2ef1edf01b 155 {
destinyXfate 2:0e2ef1edf01b 156 if (png_ptr->offset_table == NULL)
destinyXfate 2:0e2ef1edf01b 157 {
destinyXfate 2:0e2ef1edf01b 158 /* try to see if we need to do any of this fancy stuff */
destinyXfate 2:0e2ef1edf01b 159 ret = farmalloc(size);
destinyXfate 2:0e2ef1edf01b 160 if (ret == NULL || ((png_size_t)ret & 0xffff))
destinyXfate 2:0e2ef1edf01b 161 {
destinyXfate 2:0e2ef1edf01b 162 int num_blocks;
destinyXfate 2:0e2ef1edf01b 163 png_uint_32 total_size;
destinyXfate 2:0e2ef1edf01b 164 png_bytep table;
destinyXfate 2:0e2ef1edf01b 165 int i;
destinyXfate 2:0e2ef1edf01b 166 png_byte huge * hptr;
destinyXfate 2:0e2ef1edf01b 167
destinyXfate 2:0e2ef1edf01b 168 if (ret != NULL)
destinyXfate 2:0e2ef1edf01b 169 {
destinyXfate 2:0e2ef1edf01b 170 farfree(ret);
destinyXfate 2:0e2ef1edf01b 171 ret = NULL;
destinyXfate 2:0e2ef1edf01b 172 }
destinyXfate 2:0e2ef1edf01b 173
destinyXfate 2:0e2ef1edf01b 174 if(png_ptr->zlib_window_bits > 14)
destinyXfate 2:0e2ef1edf01b 175 num_blocks = (int)(1 << (png_ptr->zlib_window_bits - 14));
destinyXfate 2:0e2ef1edf01b 176 else
destinyXfate 2:0e2ef1edf01b 177 num_blocks = 1;
destinyXfate 2:0e2ef1edf01b 178 if (png_ptr->zlib_mem_level >= 7)
destinyXfate 2:0e2ef1edf01b 179 num_blocks += (int)(1 << (png_ptr->zlib_mem_level - 7));
destinyXfate 2:0e2ef1edf01b 180 else
destinyXfate 2:0e2ef1edf01b 181 num_blocks++;
destinyXfate 2:0e2ef1edf01b 182
destinyXfate 2:0e2ef1edf01b 183 total_size = ((png_uint_32)65536L) * (png_uint_32)num_blocks+16;
destinyXfate 2:0e2ef1edf01b 184
destinyXfate 2:0e2ef1edf01b 185 table = farmalloc(total_size);
destinyXfate 2:0e2ef1edf01b 186
destinyXfate 2:0e2ef1edf01b 187 if (table == NULL)
destinyXfate 2:0e2ef1edf01b 188 {
destinyXfate 2:0e2ef1edf01b 189 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 190 if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 191 png_error(png_ptr, "Out Of Memory."); /* Note "O" and "M" */
destinyXfate 2:0e2ef1edf01b 192 else
destinyXfate 2:0e2ef1edf01b 193 png_warning(png_ptr, "Out Of Memory.");
destinyXfate 2:0e2ef1edf01b 194 #endif
destinyXfate 2:0e2ef1edf01b 195 return (NULL);
destinyXfate 2:0e2ef1edf01b 196 }
destinyXfate 2:0e2ef1edf01b 197
destinyXfate 2:0e2ef1edf01b 198 if ((png_size_t)table & 0xfff0)
destinyXfate 2:0e2ef1edf01b 199 {
destinyXfate 2:0e2ef1edf01b 200 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 201 if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 202 png_error(png_ptr,
destinyXfate 2:0e2ef1edf01b 203 "Farmalloc didn't return normalized pointer");
destinyXfate 2:0e2ef1edf01b 204 else
destinyXfate 2:0e2ef1edf01b 205 png_warning(png_ptr,
destinyXfate 2:0e2ef1edf01b 206 "Farmalloc didn't return normalized pointer");
destinyXfate 2:0e2ef1edf01b 207 #endif
destinyXfate 2:0e2ef1edf01b 208 return (NULL);
destinyXfate 2:0e2ef1edf01b 209 }
destinyXfate 2:0e2ef1edf01b 210
destinyXfate 2:0e2ef1edf01b 211 png_ptr->offset_table = table;
destinyXfate 2:0e2ef1edf01b 212 png_ptr->offset_table_ptr = farmalloc(num_blocks *
destinyXfate 2:0e2ef1edf01b 213 png_sizeof (png_bytep));
destinyXfate 2:0e2ef1edf01b 214
destinyXfate 2:0e2ef1edf01b 215 if (png_ptr->offset_table_ptr == NULL)
destinyXfate 2:0e2ef1edf01b 216 {
destinyXfate 2:0e2ef1edf01b 217 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 218 if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 219 png_error(png_ptr, "Out Of memory."); /* Note "O" and "M" */
destinyXfate 2:0e2ef1edf01b 220 else
destinyXfate 2:0e2ef1edf01b 221 png_warning(png_ptr, "Out Of memory.");
destinyXfate 2:0e2ef1edf01b 222 #endif
destinyXfate 2:0e2ef1edf01b 223 return (NULL);
destinyXfate 2:0e2ef1edf01b 224 }
destinyXfate 2:0e2ef1edf01b 225
destinyXfate 2:0e2ef1edf01b 226 hptr = (png_byte huge *)table;
destinyXfate 2:0e2ef1edf01b 227 if ((png_size_t)hptr & 0xf)
destinyXfate 2:0e2ef1edf01b 228 {
destinyXfate 2:0e2ef1edf01b 229 hptr = (png_byte huge *)((long)(hptr) & 0xfffffff0L);
destinyXfate 2:0e2ef1edf01b 230 hptr = hptr + 16L; /* "hptr += 16L" fails on Turbo C++ 3.0 */
destinyXfate 2:0e2ef1edf01b 231 }
destinyXfate 2:0e2ef1edf01b 232 for (i = 0; i < num_blocks; i++)
destinyXfate 2:0e2ef1edf01b 233 {
destinyXfate 2:0e2ef1edf01b 234 png_ptr->offset_table_ptr[i] = (png_bytep)hptr;
destinyXfate 2:0e2ef1edf01b 235 hptr = hptr + (png_uint_32)65536L; /* "+=" fails on TC++3.0 */
destinyXfate 2:0e2ef1edf01b 236 }
destinyXfate 2:0e2ef1edf01b 237
destinyXfate 2:0e2ef1edf01b 238 png_ptr->offset_table_number = num_blocks;
destinyXfate 2:0e2ef1edf01b 239 png_ptr->offset_table_count = 0;
destinyXfate 2:0e2ef1edf01b 240 png_ptr->offset_table_count_free = 0;
destinyXfate 2:0e2ef1edf01b 241 }
destinyXfate 2:0e2ef1edf01b 242 }
destinyXfate 2:0e2ef1edf01b 243
destinyXfate 2:0e2ef1edf01b 244 if (png_ptr->offset_table_count >= png_ptr->offset_table_number)
destinyXfate 2:0e2ef1edf01b 245 {
destinyXfate 2:0e2ef1edf01b 246 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 247 if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 248 png_error(png_ptr, "Out of Memory."); /* Note "o" and "M" */
destinyXfate 2:0e2ef1edf01b 249 else
destinyXfate 2:0e2ef1edf01b 250 png_warning(png_ptr, "Out of Memory.");
destinyXfate 2:0e2ef1edf01b 251 #endif
destinyXfate 2:0e2ef1edf01b 252 return (NULL);
destinyXfate 2:0e2ef1edf01b 253 }
destinyXfate 2:0e2ef1edf01b 254
destinyXfate 2:0e2ef1edf01b 255 ret = png_ptr->offset_table_ptr[png_ptr->offset_table_count++];
destinyXfate 2:0e2ef1edf01b 256 }
destinyXfate 2:0e2ef1edf01b 257 else
destinyXfate 2:0e2ef1edf01b 258 ret = farmalloc(size);
destinyXfate 2:0e2ef1edf01b 259
destinyXfate 2:0e2ef1edf01b 260 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 261 if (ret == NULL)
destinyXfate 2:0e2ef1edf01b 262 {
destinyXfate 2:0e2ef1edf01b 263 if ((png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 264 png_error(png_ptr, "Out of memory."); /* Note "o" and "m" */
destinyXfate 2:0e2ef1edf01b 265 else
destinyXfate 2:0e2ef1edf01b 266 png_warning(png_ptr, "Out of memory."); /* Note "o" and "m" */
destinyXfate 2:0e2ef1edf01b 267 }
destinyXfate 2:0e2ef1edf01b 268 #endif
destinyXfate 2:0e2ef1edf01b 269
destinyXfate 2:0e2ef1edf01b 270 return (ret);
destinyXfate 2:0e2ef1edf01b 271 }
destinyXfate 2:0e2ef1edf01b 272
destinyXfate 2:0e2ef1edf01b 273 /* free a pointer allocated by png_malloc(). In the default
destinyXfate 2:0e2ef1edf01b 274 configuration, png_ptr is not used, but is passed in case it
destinyXfate 2:0e2ef1edf01b 275 is needed. If ptr is NULL, return without taking any action. */
destinyXfate 2:0e2ef1edf01b 276 void PNGAPI
destinyXfate 2:0e2ef1edf01b 277 png_free(png_structp png_ptr, png_voidp ptr)
destinyXfate 2:0e2ef1edf01b 278 {
destinyXfate 2:0e2ef1edf01b 279 if (png_ptr == NULL || ptr == NULL)
destinyXfate 2:0e2ef1edf01b 280 return;
destinyXfate 2:0e2ef1edf01b 281
destinyXfate 2:0e2ef1edf01b 282 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 283 if (png_ptr->free_fn != NULL)
destinyXfate 2:0e2ef1edf01b 284 {
destinyXfate 2:0e2ef1edf01b 285 (*(png_ptr->free_fn))(png_ptr, ptr);
destinyXfate 2:0e2ef1edf01b 286 return;
destinyXfate 2:0e2ef1edf01b 287 }
destinyXfate 2:0e2ef1edf01b 288 else png_free_default(png_ptr, ptr);
destinyXfate 2:0e2ef1edf01b 289 }
destinyXfate 2:0e2ef1edf01b 290
destinyXfate 2:0e2ef1edf01b 291 void PNGAPI
destinyXfate 2:0e2ef1edf01b 292 png_free_default(png_structp png_ptr, png_voidp ptr)
destinyXfate 2:0e2ef1edf01b 293 {
destinyXfate 2:0e2ef1edf01b 294 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 295
destinyXfate 2:0e2ef1edf01b 296 if(png_ptr == NULL) return;
destinyXfate 2:0e2ef1edf01b 297
destinyXfate 2:0e2ef1edf01b 298 if (png_ptr->offset_table != NULL)
destinyXfate 2:0e2ef1edf01b 299 {
destinyXfate 2:0e2ef1edf01b 300 int i;
destinyXfate 2:0e2ef1edf01b 301
destinyXfate 2:0e2ef1edf01b 302 for (i = 0; i < png_ptr->offset_table_count; i++)
destinyXfate 2:0e2ef1edf01b 303 {
destinyXfate 2:0e2ef1edf01b 304 if (ptr == png_ptr->offset_table_ptr[i])
destinyXfate 2:0e2ef1edf01b 305 {
destinyXfate 2:0e2ef1edf01b 306 ptr = NULL;
destinyXfate 2:0e2ef1edf01b 307 png_ptr->offset_table_count_free++;
destinyXfate 2:0e2ef1edf01b 308 break;
destinyXfate 2:0e2ef1edf01b 309 }
destinyXfate 2:0e2ef1edf01b 310 }
destinyXfate 2:0e2ef1edf01b 311 if (png_ptr->offset_table_count_free == png_ptr->offset_table_count)
destinyXfate 2:0e2ef1edf01b 312 {
destinyXfate 2:0e2ef1edf01b 313 farfree(png_ptr->offset_table);
destinyXfate 2:0e2ef1edf01b 314 farfree(png_ptr->offset_table_ptr);
destinyXfate 2:0e2ef1edf01b 315 png_ptr->offset_table = NULL;
destinyXfate 2:0e2ef1edf01b 316 png_ptr->offset_table_ptr = NULL;
destinyXfate 2:0e2ef1edf01b 317 }
destinyXfate 2:0e2ef1edf01b 318 }
destinyXfate 2:0e2ef1edf01b 319
destinyXfate 2:0e2ef1edf01b 320 if (ptr != NULL)
destinyXfate 2:0e2ef1edf01b 321 {
destinyXfate 2:0e2ef1edf01b 322 farfree(ptr);
destinyXfate 2:0e2ef1edf01b 323 }
destinyXfate 2:0e2ef1edf01b 324 }
destinyXfate 2:0e2ef1edf01b 325
destinyXfate 2:0e2ef1edf01b 326 #else /* Not the Borland DOS special memory handler */
destinyXfate 2:0e2ef1edf01b 327
destinyXfate 2:0e2ef1edf01b 328 /* Allocate memory for a png_struct or a png_info. The malloc and
destinyXfate 2:0e2ef1edf01b 329 memset can be replaced by a single call to calloc() if this is thought
destinyXfate 2:0e2ef1edf01b 330 to improve performance noticably. */
destinyXfate 2:0e2ef1edf01b 331 png_voidp /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 332 png_create_struct(int type)
destinyXfate 2:0e2ef1edf01b 333 {
destinyXfate 2:0e2ef1edf01b 334 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 335 return (png_create_struct_2(type, png_malloc_ptr_NULL, png_voidp_NULL));
destinyXfate 2:0e2ef1edf01b 336 }
destinyXfate 2:0e2ef1edf01b 337
destinyXfate 2:0e2ef1edf01b 338 /* Allocate memory for a png_struct or a png_info. The malloc and
destinyXfate 2:0e2ef1edf01b 339 memset can be replaced by a single call to calloc() if this is thought
destinyXfate 2:0e2ef1edf01b 340 to improve performance noticably. */
destinyXfate 2:0e2ef1edf01b 341 png_voidp /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 342 png_create_struct_2(int type, png_malloc_ptr malloc_fn, png_voidp mem_ptr)
destinyXfate 2:0e2ef1edf01b 343 {
destinyXfate 2:0e2ef1edf01b 344 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 345 png_size_t size;
destinyXfate 2:0e2ef1edf01b 346 png_voidp struct_ptr;
destinyXfate 2:0e2ef1edf01b 347
destinyXfate 2:0e2ef1edf01b 348 if (type == PNG_STRUCT_INFO)
destinyXfate 2:0e2ef1edf01b 349 size = png_sizeof(png_info);
destinyXfate 2:0e2ef1edf01b 350 else if (type == PNG_STRUCT_PNG)
destinyXfate 2:0e2ef1edf01b 351 size = png_sizeof(png_struct);
destinyXfate 2:0e2ef1edf01b 352 else
destinyXfate 2:0e2ef1edf01b 353 return (NULL);
destinyXfate 2:0e2ef1edf01b 354
destinyXfate 2:0e2ef1edf01b 355 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 356 if(malloc_fn != NULL)
destinyXfate 2:0e2ef1edf01b 357 {
destinyXfate 2:0e2ef1edf01b 358 png_struct dummy_struct;
destinyXfate 2:0e2ef1edf01b 359 png_structp png_ptr = &dummy_struct;
destinyXfate 2:0e2ef1edf01b 360 png_ptr->mem_ptr=mem_ptr;
destinyXfate 2:0e2ef1edf01b 361 struct_ptr = (*(malloc_fn))(png_ptr, size);
destinyXfate 2:0e2ef1edf01b 362 if (struct_ptr != NULL)
destinyXfate 2:0e2ef1edf01b 363 png_memset(struct_ptr, 0, size);
destinyXfate 2:0e2ef1edf01b 364 return (struct_ptr);
destinyXfate 2:0e2ef1edf01b 365 }
destinyXfate 2:0e2ef1edf01b 366 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 367
destinyXfate 2:0e2ef1edf01b 368 #if defined(__TURBOC__) && !defined(__FLAT__)
destinyXfate 2:0e2ef1edf01b 369 struct_ptr = (png_voidp)farmalloc(size);
destinyXfate 2:0e2ef1edf01b 370 #else
destinyXfate 2:0e2ef1edf01b 371 # if defined(_MSC_VER) && defined(MAXSEG_64K)
destinyXfate 2:0e2ef1edf01b 372 struct_ptr = (png_voidp)halloc(size,1);
destinyXfate 2:0e2ef1edf01b 373 # else
destinyXfate 2:0e2ef1edf01b 374 struct_ptr = (png_voidp)malloc(size);
destinyXfate 2:0e2ef1edf01b 375 # endif
destinyXfate 2:0e2ef1edf01b 376 #endif
destinyXfate 2:0e2ef1edf01b 377 if (struct_ptr != NULL)
destinyXfate 2:0e2ef1edf01b 378 png_memset(struct_ptr, 0, size);
destinyXfate 2:0e2ef1edf01b 379
destinyXfate 2:0e2ef1edf01b 380 return (struct_ptr);
destinyXfate 2:0e2ef1edf01b 381 }
destinyXfate 2:0e2ef1edf01b 382
destinyXfate 2:0e2ef1edf01b 383
destinyXfate 2:0e2ef1edf01b 384 /* Free memory allocated by a png_create_struct() call */
destinyXfate 2:0e2ef1edf01b 385 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 386 png_destroy_struct(png_voidp struct_ptr)
destinyXfate 2:0e2ef1edf01b 387 {
destinyXfate 2:0e2ef1edf01b 388 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 389 png_destroy_struct_2(struct_ptr, png_free_ptr_NULL, png_voidp_NULL);
destinyXfate 2:0e2ef1edf01b 390 }
destinyXfate 2:0e2ef1edf01b 391
destinyXfate 2:0e2ef1edf01b 392 /* Free memory allocated by a png_create_struct() call */
destinyXfate 2:0e2ef1edf01b 393 void /* PRIVATE */
destinyXfate 2:0e2ef1edf01b 394 png_destroy_struct_2(png_voidp struct_ptr, png_free_ptr free_fn,
destinyXfate 2:0e2ef1edf01b 395 png_voidp mem_ptr)
destinyXfate 2:0e2ef1edf01b 396 {
destinyXfate 2:0e2ef1edf01b 397 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 398 if (struct_ptr != NULL)
destinyXfate 2:0e2ef1edf01b 399 {
destinyXfate 2:0e2ef1edf01b 400 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 401 if(free_fn != NULL)
destinyXfate 2:0e2ef1edf01b 402 {
destinyXfate 2:0e2ef1edf01b 403 png_struct dummy_struct;
destinyXfate 2:0e2ef1edf01b 404 png_structp png_ptr = &dummy_struct;
destinyXfate 2:0e2ef1edf01b 405 png_ptr->mem_ptr=mem_ptr;
destinyXfate 2:0e2ef1edf01b 406 (*(free_fn))(png_ptr, struct_ptr);
destinyXfate 2:0e2ef1edf01b 407 return;
destinyXfate 2:0e2ef1edf01b 408 }
destinyXfate 2:0e2ef1edf01b 409 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 410 #if defined(__TURBOC__) && !defined(__FLAT__)
destinyXfate 2:0e2ef1edf01b 411 farfree(struct_ptr);
destinyXfate 2:0e2ef1edf01b 412 #else
destinyXfate 2:0e2ef1edf01b 413 # if defined(_MSC_VER) && defined(MAXSEG_64K)
destinyXfate 2:0e2ef1edf01b 414 hfree(struct_ptr);
destinyXfate 2:0e2ef1edf01b 415 # else
destinyXfate 2:0e2ef1edf01b 416 free(struct_ptr);
destinyXfate 2:0e2ef1edf01b 417 # endif
destinyXfate 2:0e2ef1edf01b 418 #endif
destinyXfate 2:0e2ef1edf01b 419 }
destinyXfate 2:0e2ef1edf01b 420 }
destinyXfate 2:0e2ef1edf01b 421
destinyXfate 2:0e2ef1edf01b 422 /* Allocate memory. For reasonable files, size should never exceed
destinyXfate 2:0e2ef1edf01b 423 64K. However, zlib may allocate more then 64K if you don't tell
destinyXfate 2:0e2ef1edf01b 424 it not to. See zconf.h and png.h for more information. zlib does
destinyXfate 2:0e2ef1edf01b 425 need to allocate exactly 64K, so whatever you call here must
destinyXfate 2:0e2ef1edf01b 426 have the ability to do that. */
destinyXfate 2:0e2ef1edf01b 427
destinyXfate 2:0e2ef1edf01b 428 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 429 png_malloc(png_structp png_ptr, png_uint_32 size)
destinyXfate 2:0e2ef1edf01b 430 {
destinyXfate 2:0e2ef1edf01b 431 png_voidp ret;
destinyXfate 2:0e2ef1edf01b 432
destinyXfate 2:0e2ef1edf01b 433 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 434 if (png_ptr == NULL || size == 0)
destinyXfate 2:0e2ef1edf01b 435 return (NULL);
destinyXfate 2:0e2ef1edf01b 436
destinyXfate 2:0e2ef1edf01b 437 if(png_ptr->malloc_fn != NULL)
destinyXfate 2:0e2ef1edf01b 438 ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size));
destinyXfate 2:0e2ef1edf01b 439 else
destinyXfate 2:0e2ef1edf01b 440 ret = (png_malloc_default(png_ptr, size));
destinyXfate 2:0e2ef1edf01b 441 if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 442 png_error(png_ptr, "Out of Memory!");
destinyXfate 2:0e2ef1edf01b 443 return (ret);
destinyXfate 2:0e2ef1edf01b 444 }
destinyXfate 2:0e2ef1edf01b 445
destinyXfate 2:0e2ef1edf01b 446 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 447 png_malloc_default(png_structp png_ptr, png_uint_32 size)
destinyXfate 2:0e2ef1edf01b 448 {
destinyXfate 2:0e2ef1edf01b 449 png_voidp ret;
destinyXfate 2:0e2ef1edf01b 450 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 451
destinyXfate 2:0e2ef1edf01b 452 if (png_ptr == NULL || size == 0)
destinyXfate 2:0e2ef1edf01b 453 return (NULL);
destinyXfate 2:0e2ef1edf01b 454
destinyXfate 2:0e2ef1edf01b 455 #ifdef PNG_MAX_MALLOC_64K
destinyXfate 2:0e2ef1edf01b 456 if (size > (png_uint_32)65536L)
destinyXfate 2:0e2ef1edf01b 457 {
destinyXfate 2:0e2ef1edf01b 458 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 459 if(png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 460 png_error(png_ptr, "Cannot Allocate > 64K");
destinyXfate 2:0e2ef1edf01b 461 else
destinyXfate 2:0e2ef1edf01b 462 #endif
destinyXfate 2:0e2ef1edf01b 463 return NULL;
destinyXfate 2:0e2ef1edf01b 464 }
destinyXfate 2:0e2ef1edf01b 465 #endif
destinyXfate 2:0e2ef1edf01b 466
destinyXfate 2:0e2ef1edf01b 467 /* Check for overflow */
destinyXfate 2:0e2ef1edf01b 468 #if defined(__TURBOC__) && !defined(__FLAT__)
destinyXfate 2:0e2ef1edf01b 469 if (size != (unsigned long)size)
destinyXfate 2:0e2ef1edf01b 470 ret = NULL;
destinyXfate 2:0e2ef1edf01b 471 else
destinyXfate 2:0e2ef1edf01b 472 ret = farmalloc(size);
destinyXfate 2:0e2ef1edf01b 473 #else
destinyXfate 2:0e2ef1edf01b 474 # if defined(_MSC_VER) && defined(MAXSEG_64K)
destinyXfate 2:0e2ef1edf01b 475 if (size != (unsigned long)size)
destinyXfate 2:0e2ef1edf01b 476 ret = NULL;
destinyXfate 2:0e2ef1edf01b 477 else
destinyXfate 2:0e2ef1edf01b 478 ret = halloc(size, 1);
destinyXfate 2:0e2ef1edf01b 479 # else
destinyXfate 2:0e2ef1edf01b 480 if (size != (size_t)size)
destinyXfate 2:0e2ef1edf01b 481 ret = NULL;
destinyXfate 2:0e2ef1edf01b 482 else
destinyXfate 2:0e2ef1edf01b 483 ret = malloc((size_t)size);
destinyXfate 2:0e2ef1edf01b 484 # endif
destinyXfate 2:0e2ef1edf01b 485 #endif
destinyXfate 2:0e2ef1edf01b 486
destinyXfate 2:0e2ef1edf01b 487 #ifndef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 488 if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0)
destinyXfate 2:0e2ef1edf01b 489 png_error(png_ptr, "Out of Memory");
destinyXfate 2:0e2ef1edf01b 490 #endif
destinyXfate 2:0e2ef1edf01b 491
destinyXfate 2:0e2ef1edf01b 492 return (ret);
destinyXfate 2:0e2ef1edf01b 493 }
destinyXfate 2:0e2ef1edf01b 494
destinyXfate 2:0e2ef1edf01b 495 /* Free a pointer allocated by png_malloc(). If ptr is NULL, return
destinyXfate 2:0e2ef1edf01b 496 without taking any action. */
destinyXfate 2:0e2ef1edf01b 497 void PNGAPI
destinyXfate 2:0e2ef1edf01b 498 png_free(png_structp png_ptr, png_voidp ptr)
destinyXfate 2:0e2ef1edf01b 499 {
destinyXfate 2:0e2ef1edf01b 500 if (png_ptr == NULL || ptr == NULL)
destinyXfate 2:0e2ef1edf01b 501 return;
destinyXfate 2:0e2ef1edf01b 502
destinyXfate 2:0e2ef1edf01b 503 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 504 if (png_ptr->free_fn != NULL)
destinyXfate 2:0e2ef1edf01b 505 {
destinyXfate 2:0e2ef1edf01b 506 (*(png_ptr->free_fn))(png_ptr, ptr);
destinyXfate 2:0e2ef1edf01b 507 return;
destinyXfate 2:0e2ef1edf01b 508 }
destinyXfate 2:0e2ef1edf01b 509 else png_free_default(png_ptr, ptr);
destinyXfate 2:0e2ef1edf01b 510 }
destinyXfate 2:0e2ef1edf01b 511 void PNGAPI
destinyXfate 2:0e2ef1edf01b 512 png_free_default(png_structp png_ptr, png_voidp ptr)
destinyXfate 2:0e2ef1edf01b 513 {
destinyXfate 2:0e2ef1edf01b 514 if (png_ptr == NULL || ptr == NULL)
destinyXfate 2:0e2ef1edf01b 515 return;
destinyXfate 2:0e2ef1edf01b 516
destinyXfate 2:0e2ef1edf01b 517 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 518
destinyXfate 2:0e2ef1edf01b 519 #if defined(__TURBOC__) && !defined(__FLAT__)
destinyXfate 2:0e2ef1edf01b 520 farfree(ptr);
destinyXfate 2:0e2ef1edf01b 521 #else
destinyXfate 2:0e2ef1edf01b 522 # if defined(_MSC_VER) && defined(MAXSEG_64K)
destinyXfate 2:0e2ef1edf01b 523 hfree(ptr);
destinyXfate 2:0e2ef1edf01b 524 # else
destinyXfate 2:0e2ef1edf01b 525 free(ptr);
destinyXfate 2:0e2ef1edf01b 526 # endif
destinyXfate 2:0e2ef1edf01b 527 #endif
destinyXfate 2:0e2ef1edf01b 528 }
destinyXfate 2:0e2ef1edf01b 529
destinyXfate 2:0e2ef1edf01b 530 #endif /* Not Borland DOS special memory handler */
destinyXfate 2:0e2ef1edf01b 531
destinyXfate 2:0e2ef1edf01b 532 #if defined(PNG_1_0_X)
destinyXfate 2:0e2ef1edf01b 533 # define png_malloc_warn png_malloc
destinyXfate 2:0e2ef1edf01b 534 #else
destinyXfate 2:0e2ef1edf01b 535 /* This function was added at libpng version 1.2.3. The png_malloc_warn()
destinyXfate 2:0e2ef1edf01b 536 * function will set up png_malloc() to issue a png_warning and return NULL
destinyXfate 2:0e2ef1edf01b 537 * instead of issuing a png_error, if it fails to allocate the requested
destinyXfate 2:0e2ef1edf01b 538 * memory.
destinyXfate 2:0e2ef1edf01b 539 */
destinyXfate 2:0e2ef1edf01b 540 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 541 png_malloc_warn(png_structp png_ptr, png_uint_32 size)
destinyXfate 2:0e2ef1edf01b 542 {
destinyXfate 2:0e2ef1edf01b 543 png_voidp ptr;
destinyXfate 2:0e2ef1edf01b 544 png_uint_32 save_flags;
destinyXfate 2:0e2ef1edf01b 545 if(png_ptr == NULL) return (NULL);
destinyXfate 2:0e2ef1edf01b 546
destinyXfate 2:0e2ef1edf01b 547 save_flags=png_ptr->flags;
destinyXfate 2:0e2ef1edf01b 548 png_ptr->flags|=PNG_FLAG_MALLOC_NULL_MEM_OK;
destinyXfate 2:0e2ef1edf01b 549 ptr = (png_voidp)png_malloc((png_structp)png_ptr, size);
destinyXfate 2:0e2ef1edf01b 550 png_ptr->flags=save_flags;
destinyXfate 2:0e2ef1edf01b 551 return(ptr);
destinyXfate 2:0e2ef1edf01b 552 }
destinyXfate 2:0e2ef1edf01b 553 #endif
destinyXfate 2:0e2ef1edf01b 554
destinyXfate 2:0e2ef1edf01b 555 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 556 png_memcpy_check (png_structp png_ptr, png_voidp s1, png_voidp s2,
destinyXfate 2:0e2ef1edf01b 557 png_uint_32 length)
destinyXfate 2:0e2ef1edf01b 558 {
destinyXfate 2:0e2ef1edf01b 559 png_size_t size;
destinyXfate 2:0e2ef1edf01b 560
destinyXfate 2:0e2ef1edf01b 561 size = (png_size_t)length;
destinyXfate 2:0e2ef1edf01b 562 if ((png_uint_32)size != length)
destinyXfate 2:0e2ef1edf01b 563 png_error(png_ptr,"Overflow in png_memcpy_check.");
destinyXfate 2:0e2ef1edf01b 564
destinyXfate 2:0e2ef1edf01b 565 return(png_memcpy (s1, s2, size));
destinyXfate 2:0e2ef1edf01b 566 }
destinyXfate 2:0e2ef1edf01b 567
destinyXfate 2:0e2ef1edf01b 568 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 569 png_memset_check (png_structp png_ptr, png_voidp s1, int value,
destinyXfate 2:0e2ef1edf01b 570 png_uint_32 length)
destinyXfate 2:0e2ef1edf01b 571 {
destinyXfate 2:0e2ef1edf01b 572 png_size_t size;
destinyXfate 2:0e2ef1edf01b 573
destinyXfate 2:0e2ef1edf01b 574 size = (png_size_t)length;
destinyXfate 2:0e2ef1edf01b 575 if ((png_uint_32)size != length)
destinyXfate 2:0e2ef1edf01b 576 png_error(png_ptr,"Overflow in png_memset_check.");
destinyXfate 2:0e2ef1edf01b 577
destinyXfate 2:0e2ef1edf01b 578 return (png_memset (s1, value, size));
destinyXfate 2:0e2ef1edf01b 579
destinyXfate 2:0e2ef1edf01b 580 }
destinyXfate 2:0e2ef1edf01b 581
destinyXfate 2:0e2ef1edf01b 582 #ifdef PNG_USER_MEM_SUPPORTED
destinyXfate 2:0e2ef1edf01b 583 /* This function is called when the application wants to use another method
destinyXfate 2:0e2ef1edf01b 584 * of allocating and freeing memory.
destinyXfate 2:0e2ef1edf01b 585 */
destinyXfate 2:0e2ef1edf01b 586 void PNGAPI
destinyXfate 2:0e2ef1edf01b 587 png_set_mem_fn(png_structp png_ptr, png_voidp mem_ptr, png_malloc_ptr
destinyXfate 2:0e2ef1edf01b 588 malloc_fn, png_free_ptr free_fn)
destinyXfate 2:0e2ef1edf01b 589 {
destinyXfate 2:0e2ef1edf01b 590 if(png_ptr != NULL) {
destinyXfate 2:0e2ef1edf01b 591 png_ptr->mem_ptr = mem_ptr;
destinyXfate 2:0e2ef1edf01b 592 png_ptr->malloc_fn = malloc_fn;
destinyXfate 2:0e2ef1edf01b 593 png_ptr->free_fn = free_fn;
destinyXfate 2:0e2ef1edf01b 594 }
destinyXfate 2:0e2ef1edf01b 595 }
destinyXfate 2:0e2ef1edf01b 596
destinyXfate 2:0e2ef1edf01b 597 /* This function returns a pointer to the mem_ptr associated with the user
destinyXfate 2:0e2ef1edf01b 598 * functions. The application should free any memory associated with this
destinyXfate 2:0e2ef1edf01b 599 * pointer before png_write_destroy and png_read_destroy are called.
destinyXfate 2:0e2ef1edf01b 600 */
destinyXfate 2:0e2ef1edf01b 601 png_voidp PNGAPI
destinyXfate 2:0e2ef1edf01b 602 png_get_mem_ptr(png_structp png_ptr)
destinyXfate 2:0e2ef1edf01b 603 {
destinyXfate 2:0e2ef1edf01b 604 if(png_ptr == NULL) return (NULL);
destinyXfate 2:0e2ef1edf01b 605 return ((png_voidp)png_ptr->mem_ptr);
destinyXfate 2:0e2ef1edf01b 606 }
destinyXfate 2:0e2ef1edf01b 607 #endif /* PNG_USER_MEM_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 608 #endif /* PNG_READ_SUPPORTED || PNG_WRITE_SUPPORTED */
destinyXfate 2:0e2ef1edf01b 609