diff options
author | Luigi Scarso <luigi.scarso@gmail.com> | 2020-03-12 01:13:01 +0000 |
---|---|---|
committer | Luigi Scarso <luigi.scarso@gmail.com> | 2020-03-12 01:13:01 +0000 |
commit | 59476ba79f7d3e8beff8fb4c5a684589dc29b99f (patch) | |
tree | 579c2bec9fac6848c5e186505df263ddfd20a8c6 /Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c | |
parent | 34f97da40ee8a6190275585ed040d687edd0c2f2 (diff) |
sync with upstream luatex rev. 7306.
git-svn-id: svn://tug.org/texlive/trunk@54249 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c')
-rw-r--r-- | Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c | 102 |
1 files changed, 93 insertions, 9 deletions
diff --git a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c index 9392f698aa0..cce28e0ed07 100644 --- a/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c +++ b/Build/source/texk/web2c/luatexdir/luapplib/src/util/utilmemheap.c @@ -437,6 +437,26 @@ void * _heap64_take (heap64 *heap, size_t size) return data; } +void * _heap8_take0 (heap8 *heap, size_t size) +{ + return memset(_heap8_take(heap, size), 0, size); +} + +void * _heap16_take0 (heap16 *heap, size_t size) +{ + return memset(_heap16_take(heap, size), 0, size); +} + +void * _heap32_take0 (heap32 *heap, size_t size) +{ + return memset(_heap32_take(heap, size), 0, size); +} + +void * _heap64_take0 (heap64 *heap, size_t size) +{ + return memset(_heap64_take(heap, size), 0, size); +} + /* pop last heap chunk */ #define taken_from_head(taken, head) (byte_data(taken) == head->data) @@ -462,6 +482,10 @@ void heap8_pop (heap8 *heap, void *taken, size_t size) head->prev = pyre->prev; pyre_free(pyre); } + else + { + ASSERT8(0); + } } void heap16_pop (heap16 *heap, void *taken, size_t size) @@ -481,6 +505,10 @@ void heap16_pop (heap16 *heap, void *taken, size_t size) head->prev = pyre->prev; pyre_free(pyre); } + else + { + ASSERT16(0); + } } void heap32_pop (heap32 *heap, void *taken, size_t size) @@ -500,6 +528,10 @@ void heap32_pop (heap32 *heap, void *taken, size_t size) head->prev = pyre->prev; pyre_free(pyre); } + else + { + ASSERT32(0); + } } void heap64_pop (heap64 *heap, void *taken, size_t size) @@ -519,6 +551,10 @@ void heap64_pop (heap64 *heap, void *taken, size_t size) head->prev = pyre->prev; pyre_free(pyre); } + else + { + ASSERT64(0); + } } /* heap buffer */ @@ -611,7 +647,7 @@ void * _heap64_some (heap64 *heap, size_t size, size_t *pspace) return void_data(pyre->data); } -void * heap8_more (heap8 *heap, void *taken, size_t written, size_t size) +void * heap8_more (heap8 *heap, void *taken, size_t written, size_t size, size_t *pspace) { pyre8 *pyre, *prev; pyre = heap->head; @@ -619,32 +655,40 @@ void * heap8_more (heap8 *heap, void *taken, size_t written, size_t size) if (taken_from_head(taken, pyre)) { if (size <= pyre->left) - { // unlikely + { + *pspace = pyre->left; } else if (take_new_block8(heap, pyre8, pyre, size)) { pyre = heap8_new(heap); memcpy(pyre->data, taken, written); + *pspace = pyre->left; } else { pyre = heap8_sole(heap, size); memcpy(pyre->data, taken, written); + *pspace = size; } } else if (taken_from_sole(taken, pyre, prev)) { pyre = heap8_sole(heap, size); - pyre->prev = prev->prev; memcpy(pyre->data, taken, written); + *pspace = size; + pyre->prev = prev->prev; pyre_free(prev); } else + { + ASSERT8(0); + *pspace = 0; return NULL; + } return void_data(pyre->data); } -void * heap16_more (heap16 *heap, void *taken, size_t written, size_t size) +void * heap16_more (heap16 *heap, void *taken, size_t written, size_t size, size_t *pspace) { pyre16 *pyre, *prev; pyre = heap->head; @@ -653,31 +697,39 @@ void * heap16_more (heap16 *heap, void *taken, size_t written, size_t size) { if (size <= pyre->left) { + *pspace = pyre->left; } else if (take_new_block16(heap, pyre16, pyre, size)) { pyre = heap16_new(heap); memcpy(pyre->data, taken, written); + *pspace = pyre->left; } else { pyre = heap16_sole(heap, size); memcpy(pyre->data, taken, written); + *pspace = size; } } else if (taken_from_sole(taken, pyre, prev)) { pyre = heap16_sole(heap, size); - pyre->prev = prev->prev; memcpy(pyre->data, taken, written); + *pspace = size; + pyre->prev = prev->prev; pyre_free(prev); } else + { + ASSERT16(0); + *pspace = 0; return NULL; + } return void_data(pyre->data); } -void * heap32_more (heap32 *heap, void *taken, size_t written, size_t size) +void * heap32_more (heap32 *heap, void *taken, size_t written, size_t size, size_t *pspace) { pyre32 *pyre, *prev; pyre = heap->head; @@ -686,31 +738,39 @@ void * heap32_more (heap32 *heap, void *taken, size_t written, size_t size) { if (size <= pyre->left) { + *pspace = pyre->left; } else if (take_new_block32(heap, pyre32, pyre, size)) { pyre = heap32_new(heap); memcpy(pyre->data, taken, written); + *pspace = pyre->left; } else { pyre = heap32_sole(heap, size); memcpy(pyre->data, taken, written); + *pspace = size; } } else if (taken_from_sole(taken, pyre, prev)) { pyre = heap32_sole(heap, size); - pyre->prev = prev->prev; memcpy(pyre->data, taken, written); + *pspace = size; + pyre->prev = prev->prev; pyre_free(prev); } else + { + ASSERT32(0); + *pspace = 0; return NULL; + } return void_data(pyre->data); } -void * heap64_more (heap64 *heap, void *taken, size_t written, size_t size) +void * heap64_more (heap64 *heap, void *taken, size_t written, size_t size, size_t *pspace) { pyre64 *pyre, *prev; pyre = heap->head; @@ -719,27 +779,35 @@ void * heap64_more (heap64 *heap, void *taken, size_t written, size_t size) { if (size <= pyre->left) { + *pspace = pyre->left; } else if (take_new_block64(heap, pyre64, pyre, size)) { pyre = heap64_new(heap); memcpy(pyre->data, taken, written); + *pspace = pyre->left; } else { pyre = heap64_sole(heap, size); memcpy(pyre->data, taken, written); + *pspace = size; } } else if (taken_from_sole(taken, pyre, prev)) { pyre = heap64_sole(heap, size); - pyre->prev = prev->prev; memcpy(pyre->data, taken, written); + *pspace = size; + pyre->prev = prev->prev; pyre_free(prev); } else + { + ASSERT64(0); + *pspace = 0; return NULL; + } return void_data(pyre->data); } @@ -759,6 +827,10 @@ void heap8_done (heap8 *heap, void *taken, size_t written) pyre->data += written; pyre->chunks = 1; } + else + { + ASSERT8(0); + } } void heap16_done (heap16 *heap, void *taken, size_t written) @@ -777,6 +849,10 @@ void heap16_done (heap16 *heap, void *taken, size_t written) pyre->data += written; pyre->chunks = 1; } + else + { + ASSERT16(0); + } } void heap32_done (heap32 *heap, void *taken, size_t written) @@ -795,6 +871,10 @@ void heap32_done (heap32 *heap, void *taken, size_t written) pyre->data += written; pyre->chunks = 1; } + else + { + ASSERT32(0); + } } void heap64_done (heap64 *heap, void *taken, size_t written) @@ -813,6 +893,10 @@ void heap64_done (heap64 *heap, void *taken, size_t written) pyre->data += written; pyre->chunks = 1; } + else + { + ASSERT64(0); + } } /* giveup */ |