23void *
qReallocAligned(
void *oldptr, size_t newsize, size_t oldsize, size_t alignment)
26 void *actualptr = oldptr ?
static_cast<
void **>(oldptr)[-1] :
nullptr;
27 if (alignment <=
sizeof(
void *)) {
29 void **newptr =
static_cast<
void **>(realloc(actualptr, newsize +
sizeof(
void *)));
32 if (newptr == actualptr) {
49 qptrdiff oldoffset = oldptr ?
static_cast<
char *>(oldptr) -
static_cast<
char *>(actualptr) : 0;
50 void *real = realloc(actualptr, newsize + alignment);
54 quintptr faked =
reinterpret_cast<quintptr>(real) + alignment;
55 faked &= ~(alignment - 1);
56 void **faked_ptr =
reinterpret_cast<
void **>(faked);
59 qptrdiff newoffset =
reinterpret_cast<
char *>(faked_ptr) -
static_cast<
char *>(real);
60 if (oldoffset != newoffset)
61 memmove(faked_ptr,
static_cast<
char *>(real) + oldoffset, qMin(oldsize, newsize));