18#ifndef MAGICKCORE_MEMORY_H
19#define MAGICKCORE_MEMORY_H
23#define MAGICK_INT_MAX (INT_MAX)
24#define MAGICK_PTRDIFF_MAX (PTRDIFF_MAX)
25#define MAGICK_PTRDIFF_MIN (-PTRDIFF_MAX-1)
26#define MAGICK_SIZE_MAX (SIZE_MAX)
27#define MAGICK_SSIZE_MAX (SSIZE_MAX)
28#define MAGICK_SSIZE_MIN (-SSIZE_MAX-1)
29#define MAGICK_UCHAR_MAX (UCHAR_MAX)
30#define MAGICK_UINT_MAX (UINT_MAX)
31#define MAGICK_ULONG_MAX (ULONG_MAX)
32#define MAGICK_USHORT_MAX (USHRT_MAX)
34#if defined(__cplusplus) || defined(c_plusplus)
42 *(*AcquireMemoryHandler)(size_t) magick_alloc_size(1),
43 (*DestroyMemoryHandler)(
void *),
44 *(*ResizeMemoryHandler)(
void *,size_t) magick_alloc_size(2),
45 *(*AcquireAlignedMemoryHandler)(
const size_t,
const size_t),
46 (*RelinquishAlignedMemoryHandler)(
void *);
48extern MagickExport MemoryInfo
49 *AcquireVirtualMemory(
const size_t,
const size_t) magick_alloc_sizes(1,2),
50 *RelinquishVirtualMemory(MemoryInfo *);
52extern MagickExport
size_t
53 GetMaxMemoryRequest(
void);
55extern MagickExport
void
56 *AcquireAlignedMemory(
const size_t,
const size_t)
57 magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
58 *AcquireMagickMemory(
const size_t) magick_attribute((__malloc__))
60 *AcquireCriticalMemory(
const size_t),
61 *AcquireQuantumMemory(
const size_t,
const size_t)
62 magick_attribute((__malloc__)) magick_alloc_sizes(1,2),
63 *CopyMagickMemory(
void *magick_restrict,
const void *magick_restrict,
64 const size_t) magick_attribute((__nonnull__)),
65 DestroyMagickMemory(
void),
66 GetMagickMemoryMethods(AcquireMemoryHandler *,ResizeMemoryHandler *,
67 DestroyMemoryHandler *),
68 *GetVirtualMemoryBlob(
const MemoryInfo *),
69 *RelinquishAlignedMemory(
void *),
70 *RelinquishMagickMemory(
void *),
71 *ResetMagickMemory(
void *,
int,
const size_t),
72 *ResizeMagickMemory(
void *,
const size_t)
73 magick_attribute((__malloc__)) magick_alloc_size(2),
74 *ResizeQuantumMemory(
void *,
const size_t,
const size_t)
75 magick_attribute((__malloc__)) magick_alloc_sizes(2,3),
76 SetMagickAlignedMemoryMethods(AcquireAlignedMemoryHandler,
77 RelinquishAlignedMemoryHandler),
78 SetMagickMemoryMethods(AcquireMemoryHandler,ResizeMemoryHandler,
79 DestroyMemoryHandler);
81static inline MagickBooleanType HeapOverflowSanityCheck(
82 const size_t count,
const size_t quantum)
84 if ((count == 0) || (quantum == 0))
86 if (count > (MAGICK_SIZE_MAX/quantum))
94static inline MagickBooleanType HeapOverflowSanityCheckGetSize(
95 const size_t count,
const size_t quantum,
size_t *
const extent)
97 if ((count == 0) || (quantum == 0))
99 if (count > (SIZE_MAX/quantum))
104 if (extent != (
size_t *) NULL)
105 *extent=count*quantum;
109#if defined(__cplusplus) || defined(c_plusplus)