From: Jakub Jelinek Date: Fri, 12 Jan 2007 15:02:01 +0000 (+0000) Subject: * elf/dl-minimal.c (realloc): Optimize last patch. X-Git-Tag: cvs/fedora-glibc-2_5-20070712T1701~107 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e409799bd6aea8f60430327055b3d8c4821629c;p=thirdparty%2Fglibc.git * elf/dl-minimal.c (realloc): Optimize last patch. [BZ #3352] * elf/dl-minimal.c (realloc): Let malloc() return a new pointer, and use memcpy() if it does. --- diff --git a/ChangeLog b/ChangeLog index 15b13386748..d3647a86133 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2006-10-13 Ulrich Drepper + + * elf/dl-minimal.c (realloc): Optimize last patch. + +2006-10-12 Richard Sandiford + + [BZ #3352] + * elf/dl-minimal.c (realloc): Let malloc() return a new pointer, + and use memcpy() if it does. + 2006-10-11 Ulrich Drepper * sysdeps/unix/sysv/linux/i386/sysdep.h (DOARGS_6): Fix offset. diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c index 868d3bd2ede..8e78709b5a8 100644 --- a/elf/dl-minimal.c +++ b/elf/dl-minimal.c @@ -1,5 +1,6 @@ /* Minimal replacements for basic facilities used in the dynamic linker. - Copyright (C) 1995-1998,2000-2002,2004,2005 Free Software Foundation, Inc. + Copyright (C) 1995-1998,2000-2002,2004,2005,2006 + Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -128,14 +129,13 @@ free (void *ptr) void * weak_function realloc (void *ptr, size_t n) { - void *new; if (ptr == NULL) return malloc (n); assert (ptr == alloc_last_block); + size_t old_size = alloc_ptr - alloc_last_block; alloc_ptr = alloc_last_block; - new = malloc (n); - assert (new == ptr); - return new; + void *new = malloc (n); + return new != ptr ? memcpy (new, ptr, old_size) : new; } /* Avoid signal frobnication in setjmp/longjmp. Keeps things smaller. */