On Mon, Apr 14, 2014 at 11:54:32AM -0600, Bob Beck wrote:

> On Mon, Apr 14, 2014 at 11:39 AM, Ted Unangst <t...@tedunangst.com> wrote:
> > 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)
> 
> Doesn't it make sense for sz to stay a size_t in this case? it appears
> to still be used as an offset in here, not a pointer. no?

Indeed, I don't see why you would change the type of the parameter here.

        -Otto

> 
> >  {
> >         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