| 5728 | } |
| 5729 | |
| 5730 | void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { |
| 5731 | void* mem = 0; |
| 5732 | if (oldmem == 0) { |
| 5733 | mem = mspace_malloc(msp, bytes); |
| 5734 | } |
| 5735 | else if (bytes >= MAX_REQUEST) { |
| 5736 | MALLOC_FAILURE_ACTION; |
| 5737 | } |
| 5738 | #ifdef REALLOC_ZERO_BYTES_FREES |
| 5739 | else if (bytes == 0) { |
| 5740 | mspace_free(msp, oldmem); |
| 5741 | } |
| 5742 | #endif /* REALLOC_ZERO_BYTES_FREES */ |
| 5743 | else { |
| 5744 | size_t nb = request2size(bytes); |
| 5745 | mchunkptr oldp = mem2chunk(oldmem); |
| 5746 | #if ! FOOTERS |
| 5747 | mstate m = (mstate)msp; |
| 5748 | #else /* FOOTERS */ |
| 5749 | mstate m = get_mstate_for(oldp); |
| 5750 | if (!ok_magic(m)) { |
| 5751 | USAGE_ERROR_ACTION(m, oldmem); |
| 5752 | return 0; |
| 5753 | } |
| 5754 | #endif /* FOOTERS */ |
| 5755 | if (!PREACTION(m)) { |
| 5756 | mchunkptr newp = try_realloc_chunk(m, oldp, nb, 1); |
| 5757 | POSTACTION(m); |
| 5758 | if (newp != 0) { |
| 5759 | check_inuse_chunk(m, newp); |
| 5760 | mem = chunk2mem(newp); |
| 5761 | } |
| 5762 | else { |
| 5763 | mem = mspace_malloc(m, bytes); |
| 5764 | if (mem != 0) { |
| 5765 | size_t oc = chunksize(oldp) - overhead_for(oldp); |
| 5766 | memcpy(mem, oldmem, (oc < bytes)? oc : bytes); |
| 5767 | mspace_free(m, oldmem); |
| 5768 | } |
| 5769 | } |
| 5770 | } |
| 5771 | } |
| 5772 | return mem; |
| 5773 | } |
| 5774 | |
| 5775 | void* mspace_realloc_in_place(mspace msp, void* oldmem, size_t bytes) { |
| 5776 | void* mem = 0; |
nothing calls this directly
no test coverage detected