| 5835 | } |
| 5836 | |
| 5837 | void* mspace_realloc(mspace msp, void* oldmem, size_t bytes) { |
| 5838 | void* mem = 0; |
| 5839 | if (oldmem == 0) { |
| 5840 | mem = mspace_malloc(msp, bytes); |
| 5841 | } |
| 5842 | else if (bytes >= MAX_REQUEST) { |
| 5843 | MALLOC_FAILURE_ACTION; |
| 5844 | } |
| 5845 | #ifdef REALLOC_ZERO_BYTES_FREES |
| 5846 | else if (bytes == 0) { |
| 5847 | mspace_free(msp, oldmem); |
| 5848 | } |
| 5849 | #endif /* REALLOC_ZERO_BYTES_FREES */ |
| 5850 | else { |
| 5851 | size_t nb = request2size(bytes); |
| 5852 | mchunkptr oldp = mem2chunk(oldmem); |
| 5853 | #if ! FOOTERS |
| 5854 | mstate m = (mstate)msp; |
| 5855 | #else /* FOOTERS */ |
| 5856 | mstate m = get_mstate_for(oldp); |
| 5857 | if (!ok_magic(m)) { |
| 5858 | USAGE_ERROR_ACTION(m, oldmem); |
| 5859 | return 0; |
| 5860 | } |
| 5861 | #endif /* FOOTERS */ |
| 5862 | if (!PREACTION(m)) { |
| 5863 | mchunkptr newp = try_realloc_chunk(m, oldp, nb, 1); |
| 5864 | POSTACTION(m); |
| 5865 | if (newp != 0) { |
| 5866 | check_inuse_chunk(m, newp); |
| 5867 | mem = chunk2mem(newp); |
| 5868 | } |
| 5869 | else { |
| 5870 | mem = mspace_malloc(m, bytes); |
| 5871 | if (mem != 0) { |
| 5872 | size_t oc = chunksize(oldp) - overhead_for(oldp); |
| 5873 | memcpy(mem, oldmem, (oc < bytes)? oc : bytes); |
| 5874 | mspace_free(m, oldmem); |
| 5875 | } |
| 5876 | } |
| 5877 | } |
| 5878 | } |
| 5879 | return mem; |
| 5880 | } |
| 5881 | |
| 5882 | void* mspace_realloc_in_place(mspace msp, void* oldmem, size_t bytes) { |
| 5883 | void* mem = 0; |
nothing calls this directly
no test coverage detected