diff options
author | Jakub Jelinek <jakub@redhat.com> | 2007-01-12 15:02:01 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2007-01-12 15:02:01 +0000 |
commit | 5e409799bd6aea8f60430327055b3d8c4821629c (patch) | |
tree | 75d27b45f56d5edf83de398ba2dc87958a921e8c | |
parent | 97a8040dde116163e0611a610dd532c1c1a97e67 (diff) | |
download | glibc-5e409799bd6aea8f60430327055b3d8c4821629c.tar glibc-5e409799bd6aea8f60430327055b3d8c4821629c.tar.gz glibc-5e409799bd6aea8f60430327055b3d8c4821629c.tar.bz2 glibc-5e409799bd6aea8f60430327055b3d8c4821629c.zip |
* 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.
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | elf/dl-minimal.c | 10 |
2 files changed, 15 insertions, 5 deletions
@@ -1,3 +1,13 @@ +2006-10-13 Ulrich Drepper <drepper@redhat.com> + + * elf/dl-minimal.c (realloc): Optimize last patch. + +2006-10-12 Richard Sandiford <richard@codesourcery.com> + + [BZ #3352] + * elf/dl-minimal.c (realloc): Let malloc() return a new pointer, + and use memcpy() if it does. + 2006-10-11 Ulrich Drepper <drepper@redhat.com> * sysdeps/unix/sysv/linux/i386/sysdep.h (DOARGS_6): Fix offset. diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c index 868d3bd2ed..8e78709b5a 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. */ |