png_voidp png_debug_malloc(png_structp png_ptr, png_uint_32 size) { /* png_malloc has already tested for NULL; png_create_struct calls png_debug_malloc directly, with png_ptr == NULL which is OK */ if (size == 0) return (png_voidp)(NULL); /* This calls the library allocator twice, once to get the requested buffer and once to get a new free list entry. */ { memory_infop pinfo = png_malloc_default(png_ptr, sizeof *pinfo); pinfo->size = size; current_allocation += size; if (current_allocation > maximum_allocation) maximum_allocation = current_allocation; pinfo->pointer = png_malloc_default(png_ptr, size); pinfo->next = pinformation; pinformation = pinfo; /* Make sure the caller isn't assuming zeroed memory. */ png_memset(pinfo->pointer, 0xdd, pinfo->size); #if PNG_DEBUG if(verbose) printf("png_malloc %d bytes at %x\n",size,pinfo->pointer); #endif assert(pinfo->size != 12345); return (png_voidp)(pinfo->pointer); } }
png_voidp png_malloc(png_structp png_ptr, png_uint_32 size) { #ifndef PNG_USER_MEM_SUPPORTED png_voidp ret; #endif if (png_ptr == NULL || size == 0) return ((png_voidp)NULL); #ifdef PNG_USER_MEM_SUPPORTED if(png_ptr->malloc_fn != NULL) return ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, size)); else return (png_malloc_default(png_ptr, size)); }
png_voidp PNGAPI png_malloc(png_structp png_ptr, png_uint_32 size) { png_voidp ret; #ifdef PNG_USER_MEM_SUPPORTED if (png_ptr == NULL || size == 0) return (NULL); if (png_ptr->malloc_fn != NULL) ret = ((png_voidp)(*(png_ptr->malloc_fn))(png_ptr, (png_size_t)size)); else ret = (png_malloc_default(png_ptr, size)); if (ret == NULL && (png_ptr->flags&PNG_FLAG_MALLOC_NULL_MEM_OK) == 0) png_error(png_ptr, "Out of Memory!"); return (ret); }