# HG changeset patch # User crestani # Date 1137779990 0 # Node ID 72b7d685c194e439235fc18e1423360bbe5ba8c6 # Parent 948bd302ca41b97e4908491bb12867985ea8e129 [xemacs-hg @ 2006-01-20 17:59:48 by crestani] * dynarr.c (Dynarr_realloc): Determine size of memory region to copy correctly, fix types. * dynarr.c (Dynarr_lisp_realloc): Determine size of memory region to copy correctly. * dynarr.c (Dynarr_resize): Call Dynarr_realloc with number of elements instead of memory region size. diff -r 948bd302ca41 -r 72b7d685c194 src/ChangeLog --- a/src/ChangeLog Fri Jan 20 17:50:46 2006 +0000 +++ b/src/ChangeLog Fri Jan 20 17:59:50 2006 +0000 @@ -1,3 +1,12 @@ +2006-01-19 Marcus Crestani + + * dynarr.c (Dynarr_realloc): Determine size of memory region to + copy correctly, fix types. + * dynarr.c (Dynarr_lisp_realloc): Determine size of memory region + to copy correctly. + * dynarr.c (Dynarr_resize): Call Dynarr_realloc with number of + elements instead of memory region size. + 2006-01-19 Marcus Crestani * objects-x.c (x_find_charset_font): Add cast to fix C++ build. diff -r 948bd302ca41 -r 72b7d685c194 src/dynarr.c --- a/src/dynarr.c Fri Jan 20 17:50:46 2006 +0000 +++ b/src/dynarr.c Fri Jan 20 17:59:50 2006 +0000 @@ -129,16 +129,17 @@ static int Dynarr_min_size = 8; static void -Dynarr_realloc (Dynarr *dy, Bytecount new_size) +Dynarr_realloc (Dynarr *dy, int new_size) { if (DUMPEDP (dy->base)) { void *new_base = malloc (new_size); - memcpy (new_base, dy->base, dy->max > new_size ? dy->max : new_size); + memcpy (new_base, dy->base, + (dy->max < new_size ? dy->max : new_size) * dy->elsize); dy->base = new_base; } else - dy->base = xrealloc (dy->base, new_size); + dy->base = xrealloc (dy->base, new_size * dy->elsize); } void * @@ -158,13 +159,13 @@ Dynarr); static void -Dynarr_lisp_realloc (Dynarr *dy, Elemcount new_size) +Dynarr_lisp_realloc (Dynarr *dy, int new_size) { void *new_base = alloc_lrecord_array (dy->elsize, new_size, dy->lisp_imp); void *old_base = dy->base; if (dy->base) memcpy (new_base, dy->base, - (dy->max > new_size ? dy->max : new_size) * dy->elsize); + (dy->max < new_size ? dy->max : new_size) * dy->elsize); dy->base = new_base; if (old_base) mc_free (old_base); @@ -205,9 +206,9 @@ if (dy->lisp_imp) Dynarr_lisp_realloc (dy, newsize); else - Dynarr_realloc (dy, newsize*dy->elsize); + Dynarr_realloc (dy, newsize); #else /* not NEW_GC */ - Dynarr_realloc (dy, newsize*dy->elsize); + Dynarr_realloc (dy, newsize); #endif /* not NEW_GC */ dy->max = newsize; }