MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / mspace_realloc

Function mspace_realloc

system/lib/dlmalloc.c:5837–5880  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5835}
5836
5837void* 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
5882void* mspace_realloc_in_place(mspace msp, void* oldmem, size_t bytes) {
5883 void* mem = 0;

Callers

nothing calls this directly

Calls 4

mspace_mallocFunction · 0.85
try_realloc_chunkFunction · 0.85
memcpyFunction · 0.85
mspace_freeFunction · 0.85

Tested by

no test coverage detected