diff options
Diffstat (limited to 'src/libmowgli/base/memslice.c')
-rw-r--r-- | src/libmowgli/base/memslice.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/src/libmowgli/base/memslice.c b/src/libmowgli/base/memslice.c index a271821..8d8f3a2 100644 --- a/src/libmowgli/base/memslice.c +++ b/src/libmowgli/base/memslice.c @@ -26,7 +26,8 @@ static mowgli_heap_t *allocator_heap; /* * Our slice allocation engine. */ -typedef struct { +typedef struct +{ size_t size; mowgli_heap_t *heap; @@ -36,7 +37,8 @@ typedef struct { /* * Allocation tag. */ -typedef struct { +typedef struct +{ slice_alloc_t *owner; } slice_tag_t; @@ -49,6 +51,7 @@ nexthigher(size_t k) size_t i; k--; + for (i = 1; i < sizeof(k) * 8; i <<= 1) k |= k >> i; @@ -109,7 +112,7 @@ memslice_alloc(size_t i) ptr = mowgli_heap_alloc(alloc->heap); ((slice_tag_t *) ptr)->owner = alloc; - return ptr + sizeof(slice_tag_t); + return (char *) ptr + sizeof(slice_tag_t); } /* @@ -122,7 +125,7 @@ memslice_free(void *ptr) return_if_fail(ptr != NULL); - tag = ptr - sizeof(slice_tag_t); + tag = (void *) ((char *) ptr - sizeof(slice_tag_t)); mowgli_heap_free(tag->owner->heap, tag); } |