fix reallocarr indirection (see #492)

This commit is contained in:
Daan 2021-12-15 16:32:26 -08:00
parent 438595e693
commit 9fbf83c433

View file

@ -92,27 +92,23 @@ mi_decl_restrict void* mi_aligned_alloc(size_t alignment, size_t size) mi_attr_n
void* mi_reallocarray( void* p, size_t count, size_t size ) mi_attr_noexcept { // BSD void* mi_reallocarray( void* p, size_t count, size_t size ) mi_attr_noexcept { // BSD
void* newp = mi_reallocn(p,count,size); void* newp = mi_reallocn(p,count,size);
if (newp==NULL) errno = ENOMEM; if (newp==NULL) { errno = ENOMEM; }
return newp; return newp;
} }
int mi_reallocarr( void* p, size_t count, size_t size ) mi_attr_noexcept { // NetBSD int mi_reallocarr( void* p, size_t count, size_t size ) mi_attr_noexcept { // NetBSD
void** op = (void** )p; mi_assert(p != NULL);
int serrno = errno; if (p == NULL) return EINVAL; // should we set errno as well?
void* newp = mi_reallocn(p,count,size); void** op = (void**)p;
if (mi_unlikely(newp == NULL)) { void* newp = mi_reallocarray(*op, count, size);
errno = ENOMEM; if (mi_unlikely(newp == NULL)) return errno;
return errno; *op = newp;
} else { return 0;
*op = newp;
errno = serrno;
return 0;
}
} }
void* mi__expand(void* p, size_t newsize) mi_attr_noexcept { // Microsoft void* mi__expand(void* p, size_t newsize) mi_attr_noexcept { // Microsoft
void* res = mi_expand(p, newsize); void* res = mi_expand(p, newsize);
if (res == NULL) errno = ENOMEM; if (res == NULL) { errno = ENOMEM; }
return res; return res;
} }