MCPcopy Create free account
hub / github.com/Singular/Singular / __omDebugRealloc

Function __omDebugRealloc

omalloc/omDebug.c:352–447  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

350}
351
352static void* __omDebugRealloc(void* old_addr, void* old_size_bin, void* new_size_bin,
353 omError_t old_status, omTrackFlags_t old_flags, omTrackFlags_t new_flags,
354 char track, OM_FLR_DECL)
355{
356 void* new_addr;
357 size_t old_size = (old_flags & OM_FSIZE ? (size_t) old_size_bin :
358 (omSizeOfAddr(old_addr)));
359 size_t new_size;
360
361 omAssume(new_flags & OM_FSIZE || new_flags & OM_FBIN);
362
363 if (old_addr == NULL || ((old_flags & OM_FSIZE) && old_size_bin == NULL))
364 {
365 new_addr = __omDebugAlloc(new_size_bin, new_flags, track, OM_FLR_VAL);
366 }
367 else if (om_Opts.Keep > 0 || track > 0 || omIsTrackAddr(old_addr) || old_status != omError_NoError ||
368 old_flags & OM_FKEEP || new_flags & OM_FKEEP)
369 {
370 new_addr = __omDebugAlloc(new_size_bin, new_flags, track, OM_FLR_VAL);
371 new_size = omSizeOfAddr(new_addr);
372 old_size = omSizeOfAddr(old_addr);
373
374 memcpy(new_addr, old_addr, (old_size < new_size ? old_size : new_size));
375
376 if ((new_flags & OM_FZERO) && new_size > old_size)
377 memset((char *)new_addr + old_size, 0, new_size - old_size);
378 if (old_status == omError_NoError)
379 __omDebugFree(old_addr, old_size_bin, old_flags, OM_FLR_VAL);
380 }
381 else
382 {
383 if (new_flags & OM_FBIN)
384 {
385 omBin new_bin = (omBin) new_size_bin;
386 omBin old_bin = (omBin) old_size_bin;
387
388 omAssume(old_flags & OM_FBIN);
389 if (new_flags & OM_FZERO)
390 __omTypeRealloc0Bin(old_addr, old_bin, void*, new_addr, new_bin);
391 else
392 __omTypeReallocBin(old_addr, old_bin, void*, new_addr, new_bin);
393 }
394 else
395 {
396 new_size = (size_t) new_size_bin;
397 if (new_size == 0) new_size = 1;
398 omAssume(!(new_flags & OM_FBIN) && !(old_flags & OM_FBIN));
399
400 if (old_flags & OM_FSIZE)
401 {
402 size_t old_size = (size_t) old_size_bin;
403
404 if (new_flags & OM_FZERO)
405 {
406#ifdef OM_ALIGNMENT_NEEDS_WORK
407 if (new_flags & OM_FALIGN)
408 __omTypeRealloc0AlignedSize(old_addr, old_size, void*, new_addr, new_size);
409 else

Callers 1

_omDebugReallocFunction · 0.85

Calls 3

omSizeOfAddrFunction · 0.85
__omDebugAllocFunction · 0.85
__omDebugFreeFunction · 0.85

Tested by

no test coverage detected