22void *
qReallocAligned(
void *oldptr, size_t newsize, size_t oldsize, size_t alignment)
25 void *actualptr = oldptr ?
static_cast<
void **>(oldptr)[-1] :
nullptr;
26 if (alignment <=
sizeof(
void *)) {
28 void **newptr =
static_cast<
void **>(realloc(actualptr, newsize +
sizeof(
void *)));
31 if (newptr == actualptr) {
48 qptrdiff oldoffset = oldptr ?
static_cast<
char *>(oldptr) -
static_cast<
char *>(actualptr) : 0;
49 void *real = realloc(actualptr, newsize + alignment);
53 quintptr faked =
reinterpret_cast<quintptr>(real) + alignment;
54 faked &= ~(alignment - 1);
55 void **faked_ptr =
reinterpret_cast<
void **>(faked);
58 qptrdiff newoffset =
reinterpret_cast<
char *>(faked_ptr) -
static_cast<
char *>(real);
59 if (oldoffset != newoffset)
60 memmove(faked_ptr,
static_cast<
char *>(real) + oldoffset, qMin(oldsize, newsize));