Small tweak. Use a union, instead of casts. There's still casting for
the call to insert(), but I think this is a little better. Also use
the correct type for the insert() parameter.

Index: stdlib/malloc.c
===================================================================
RCS file: /cvs/src/lib/libc/stdlib/malloc.c,v
retrieving revision 1.152
diff -u -p -r1.152 malloc.c
--- stdlib/malloc.c     3 Apr 2014 16:18:11 -0000       1.152
+++ stdlib/malloc.c     14 Apr 2014 17:37:21 -0000
@@ -94,7 +94,10 @@
 
 struct region_info {
        void *p;                /* page; low bits used to mark chunks */
-       uintptr_t size;         /* size for pages, or chunk_info pointer */
+       union {
+               size_t size;            /* size for pages */
+               struct chunk_info *info;/* chunk_info pointer */
+       };
 #ifdef MALLOC_STATS
        void *f;                /* where allocated from */
 #endif
@@ -737,7 +740,7 @@ alloc_chunk_info(struct dir_info *d, int
  * non-MAP_FIXED mappings with hint 0 start at BRKSIZ.
  */
 static int
-insert(struct dir_info *d, void *p, size_t sz, void *f)
+insert(struct dir_info *d, void *p, uintptr_t sz, void *f)
 {
        size_t index;
        size_t mask;
@@ -985,7 +988,7 @@ free_bytes(struct dir_info *d, struct re
        struct chunk_info *info;
        int i;
 
-       info = (struct chunk_info *)r->size;
+       info = r->info;
        if (info->canary != d->canary1)
                wrterror("chunk info corrupted", NULL);
 

Reply via email to