mirror of
https://github.com/nothings/stb
synced 2024-12-15 04:22:35 +03:00
change previous explicitly-sized realloc support to be new API and unbreak old API
This commit is contained in:
parent
853fda6132
commit
82ca643ef3
20
stb_image.h
20
stb_image.h
@ -621,18 +621,22 @@ typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1];
|
|||||||
#define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y))))
|
#define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (32 - (y))))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(STBI_MALLOC) && defined(STBI_FREE) && defined(STBI_REALLOC)
|
#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED))
|
||||||
// ok
|
// ok
|
||||||
#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC)
|
#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED)
|
||||||
// ok
|
// ok
|
||||||
#else
|
#else
|
||||||
#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC."
|
#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STBI_MALLOC
|
#ifndef STBI_MALLOC
|
||||||
#define STBI_MALLOC(sz) malloc(sz)
|
#define STBI_MALLOC(sz) malloc(sz)
|
||||||
#define STBI_REALLOC(p,oldsz,newsz) realloc(p,newsz)
|
#define STBI_REALLOC(p,newsz) realloc(p,newsz)
|
||||||
#define STBI_FREE(p) free(p)
|
#define STBI_FREE(p) free(p)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef STBI_REALLOC_SIZED
|
||||||
|
#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// x86/x64 detection
|
// x86/x64 detection
|
||||||
@ -3615,7 +3619,7 @@ static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room
|
|||||||
limit = old_limit = (int) (z->zout_end - z->zout_start);
|
limit = old_limit = (int) (z->zout_end - z->zout_start);
|
||||||
while (cur + n > limit)
|
while (cur + n > limit)
|
||||||
limit *= 2;
|
limit *= 2;
|
||||||
q = (char *) STBI_REALLOC(z->zout_start, old_limit, limit);
|
q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit);
|
||||||
if (q == NULL) return stbi__err("outofmem", "Out of memory");
|
if (q == NULL) return stbi__err("outofmem", "Out of memory");
|
||||||
z->zout_start = q;
|
z->zout_start = q;
|
||||||
z->zout = q + cur;
|
z->zout = q + cur;
|
||||||
@ -4405,7 +4409,7 @@ static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp)
|
|||||||
if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096;
|
if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096;
|
||||||
while (ioff + c.length > idata_limit)
|
while (ioff + c.length > idata_limit)
|
||||||
idata_limit *= 2;
|
idata_limit *= 2;
|
||||||
p = (stbi_uc *) STBI_REALLOC(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory");
|
p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory");
|
||||||
z->idata = p;
|
z->idata = p;
|
||||||
}
|
}
|
||||||
if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG");
|
if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG");
|
||||||
|
@ -157,19 +157,25 @@ STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w,
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && defined(STBIW_REALLOC)
|
#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED))
|
||||||
// ok
|
// ok
|
||||||
#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC)
|
#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED)
|
||||||
// ok
|
// ok
|
||||||
#else
|
#else
|
||||||
#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC."
|
#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)."
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef STBIW_MALLOC
|
#ifndef STBIW_MALLOC
|
||||||
#define STBIW_MALLOC(sz) malloc(sz)
|
#define STBIW_MALLOC(sz) malloc(sz)
|
||||||
#define STBIW_REALLOC(p,oldsz,newsz) realloc(p,newsz)
|
#define STBIW_REALLOC(p,newsz) realloc(p,newsz)
|
||||||
#define STBIW_FREE(p) free(p)
|
#define STBIW_FREE(p) free(p)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef STBIW_REALLOC_SIZED
|
||||||
|
#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifndef STBIW_MEMMOVE
|
#ifndef STBIW_MEMMOVE
|
||||||
#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz)
|
#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz)
|
||||||
#endif
|
#endif
|
||||||
@ -647,7 +653,7 @@ int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *da
|
|||||||
static void *stbiw__sbgrowf(void **arr, int increment, int itemsize)
|
static void *stbiw__sbgrowf(void **arr, int increment, int itemsize)
|
||||||
{
|
{
|
||||||
int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1;
|
int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1;
|
||||||
void *p = STBIW_REALLOC(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2);
|
void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2);
|
||||||
STBIW_ASSERT(p);
|
STBIW_ASSERT(p);
|
||||||
if (p) {
|
if (p) {
|
||||||
if (!*arr) ((int *) p)[1] = 0;
|
if (!*arr) ((int *) p)[1] = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user