Optimize xmalloc, xcalloc, xrealloc, and xstrdup
authorUlrich Drepper <drepper@gmail.com>
Mon, 9 Jan 2012 02:19:43 +0000 (21:19 -0500)
committerUlrich Drepper <drepper@gmail.com>
Mon, 9 Jan 2012 02:19:43 +0000 (21:19 -0500)
Add alloc_size attribute and apply consistently the malloc attribute
to xmalloc, xcalloc, xrealloc, and xstrdup.

15 files changed:
ChangeLog
catgets/gencat.c
elf/pldd.c
iconv/iconv_charmap.c
iconv/iconvconfig.c
iconv/strtab.c
include/sys/cdefs.h
locale/programs/locale.c
locale/programs/localedef.c
locale/programs/localedef.h
locale/programs/simple-hash.c
nscd/mem.c
nscd/nscd.h
nss/makedb.c
sysdeps/generic/ldconfig.h

index 0726cd4..a08838c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2012-01-08  Ulrich Drepper  <drepper@gmail.com>
+
+       * include/sys/cdefs.h: Define __attribute_alloc_size.
+       * catgets/gencat.c: Add alloc_size attribute and apply consistently
+       the malloc attribute to xmalloc, xcalloc, xrealloc, and xstrdup.
+       * elf/pldd.c: Likewise.
+       * iconv/iconv_charmap.c: Likewise.
+       * iconv/iconvconfig.c: Likewise.
+       * iconv/strtab.c: Likewise.
+       * locale/programs/locale.c: Likewise.
+       * locale/programs/localedef.h: Likewise.
+       * locale/programs/simple-hash.c: Likewise.
+       * nscd/nscd.h: Likewise.
+       * nss/makedb.c: Likewise.
+       * sysdeps/generic/ldconfig.h: Likewise.
+       * locale/programs/localedef.c: Remove xmalloc prototype.
+       * nscd/mem.c: Remove xmalloc and xcalloc prototypes.
+
 2012-01-05  Paul Pluzhnikov  <ppluzhnikov@google.com>
 
        * stdio-common/vfscanf.c (_IO_vfscanf_internal): Use alloca when
index c8cabb9..a915543 100644 (file)
@@ -138,10 +138,13 @@ static struct argp argp =
 
 
 /* Wrapper functions with error checking for standard functions.  */
-extern void *xmalloc (size_t n);
-extern void *xcalloc (size_t n, size_t s);
-extern void *xrealloc (void *o, size_t n);
-extern char *xstrdup (const char *);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
+extern void *xrealloc (void *o, size_t n)
+  __attribute_malloc__ __attribute_alloc_size (2);
+extern char *xstrdup (const char *) __attribute_malloc__;
 
 /* Prototypes for local functions.  */
 static void error_print (void);
index 255326e..51a3f44 100644 (file)
@@ -44,8 +44,10 @@ extern char *program_invocation_short_name;
 #define PACKAGE _libc_intl_domainname
 
 /* External functions.  */
-extern void *xmalloc (size_t n);
-extern void *xrealloc (void *p, size_t n);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xrealloc (void *o, size_t n)
+  __attribute_malloc__ __attribute_alloc_size (2);
 
 /* Name and version of program.  */
 static void print_version (FILE *stream, struct argp_state *state);
index d128111..09bfa92 100644 (file)
@@ -1,5 +1,5 @@
 /* Convert using charmaps and possibly iconv().
-   Copyright (C) 2001, 2005, 2006, 2008 Free Software Foundation, Inc.
+   Copyright (C) 2001, 2005, 2006, 2008, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
 
 
 
 /* Prototypes for a few program-wide used functions.  */
-extern void *xmalloc (size_t __n);
-extern void *xcalloc (size_t __n, size_t __s);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
 
 
 struct convtable
index afcea94..9738ed8 100644 (file)
@@ -248,9 +248,12 @@ static struct
 static const char gconv_module_ext[] = MODULE_EXT;
 
 
-extern void *xmalloc (size_t n) __attribute_malloc__;
-extern void *xcalloc (size_t n, size_t m) __attribute_malloc__;
-extern void *xrealloc (void *p, size_t n);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
+extern void *xrealloc (void *o, size_t n)
+  __attribute_malloc__ __attribute_alloc_size (2);
 
 
 /* C string table handling.  */
index 4a8f29a..37b9077 100644 (file)
@@ -1,5 +1,5 @@
 /* C string table handling.
-   Copyright (C) 2000, 2001, 2005 Free Software Foundation, Inc.
+   Copyright (C) 2000, 2001, 2005, 2012 Free Software Foundation, Inc.
    Written by Ulrich Drepper <drepper@redhat.com>, 2000.
 
    This program is free software; you can redistribute it and/or modify
@@ -66,7 +66,8 @@ struct Strtab
 static size_t ps;
 
 
-extern void *xmalloc (size_t n) __attribute_malloc__;
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
 
 /* Prototypes for our functions that are used from iconvconfig.c.  If
    you change these, change also iconvconfig.c.  */
index cd0750b..a2bdf20 100644 (file)
@@ -12,4 +12,11 @@ extern void __chk_fail (void) __attribute__ ((__noreturn__));
 libc_hidden_proto (__chk_fail)
 rtld_hidden_proto (__chk_fail)
 
+
+#if __GNUC_PREREQ (4,3)
+# define __attribute_alloc_size(...) __attribute__ ((alloc_size (__VA_ARGS__)))
+#else
+# define __attribute_alloc_size(...)
+#endif
+
 #endif
index 579094d..2cd4be8 100644 (file)
@@ -44,8 +44,9 @@
 #include "charmap-dir.h"
 #include "../locarchive.h"
 
-extern void *xmalloc (size_t __n);
-extern char *xstrdup (const char *__str);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern char *xstrdup (const char *) __attribute_malloc__;
 
 #define ARCHIVE_NAME LOCALEDIR "/locale-archive"
 
index aa59444..75905f9 100644 (file)
@@ -169,9 +169,6 @@ static struct argp argp =
 };
 
 
-/* Prototypes for global functions.  */
-extern void *xmalloc (size_t __n);
-
 /* Prototypes for local functions.  */
 static void error_print (void);
 static const char *construct_output_path (char *path);
index bdff9e6..ac1cae5 100644 (file)
@@ -1,5 +1,5 @@
 /* General definitions for localedef(1).
-   Copyright (C) 1998,1999,2000,2001,2002,2005 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002,2005,2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
 
@@ -121,10 +121,13 @@ extern const char *alias_file;
 
 
 /* Prototypes for a few program-wide used functions.  */
-extern void *xmalloc (size_t __n);
-extern void *xcalloc (size_t __n, size_t __size);
-extern void *xrealloc (void *__p, size_t __n);
-extern char *xstrdup (const char *__str);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
+extern void *xrealloc (void *o, size_t n)
+  __attribute_malloc__ __attribute_alloc_size (2);
+extern char *xstrdup (const char *) __attribute_malloc__;
 
 
 /* Wrapper to switch LC_CTYPE back to the locale specified in the
index b9cc237..573f7e4 100644 (file)
@@ -1,5 +1,5 @@
 /* Implement simple hashing table with string based keys.
-   Copyright (C) 1994-1997,2000,2001,2002,2005 Free Software Foundation, Inc.
+   Copyright (C) 1994-1997,2000-2002,2005,2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, October 1994.
 
 #define hashval_t uint32_t
 #include "hashval.h"
 
-extern void *xmalloc (size_t __n);
-extern void *xcalloc (size_t __n, size_t __m);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
 
 typedef struct hash_entry
 {
index fcea6db..8ba2ef6 100644 (file)
@@ -1,5 +1,5 @@
 /* Cache memory handling.
-   Copyright (C) 2004, 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2004-2006, 2008, 2009, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
 
 #include "nscd.h"
 
 
-/* Wrapper functions with error checking for standard functions.  */
-extern void *xmalloc (size_t n);
-extern void *xcalloc (size_t n, size_t s);
-
-
 static int
 sort_he (const void *p1, const void *p2)
 {
index fdaf01b..9ac4379 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 1998-2001, 2003-2009, 2011 Free Software Foundation, Inc.
+/* Copyright (c) 1998-2001, 2003-2009, 2011, 2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
 
@@ -201,9 +201,12 @@ extern gid_t old_gid;
 /* Prototypes for global functions.  */
 
 /* Wrapper functions with error checking for standard functions.  */
-extern void *xmalloc (size_t n);
-extern void *xcalloc (size_t n, size_t s);
-extern void *xrealloc (void *o, size_t n);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
+extern void *xrealloc (void *o, size_t n)
+  __attribute_malloc__ __attribute_alloc_size (2);
 
 /* nscd.c */
 extern void termination_handler (int signum) __attribute__ ((__noreturn__));
index 52d4ae3..e9b6af0 100644 (file)
@@ -167,8 +167,10 @@ static void reset_file_creation_context (void);
 
 
 /* External functions.  */
-extern void *xmalloc (size_t n) __attribute_malloc__;
-extern void *xcalloc (size_t n, size_t m) __attribute_malloc__;
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
 
 
 int
index fadd5ec..2381d9e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2002, 2003, 2007 Free Software Foundation, Inc.
+/* Copyright (C) 1999,2000,2002,2003,2007,2012 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Andreas Jaeger <aj@suse.de>, 1999.
 
@@ -81,9 +81,12 @@ extern int opt_verbose;
 extern int opt_format;
 
 /* Prototypes for a few program-wide used functions.  */
-extern void *xmalloc (size_t __n);
-extern void *xcalloc (size_t __n, size_t __size);
-extern void *xrealloc (void *__p, size_t __n);
-extern char *xstrdup (const char *__str);
+extern void *xmalloc (size_t n)
+  __attribute_malloc__ __attribute_alloc_size (1);
+extern void *xcalloc (size_t n, size_t s)
+  __attribute_malloc__ __attribute_alloc_size (1, 2);
+extern void *xrealloc (void *o, size_t n)
+  __attribute_malloc__ __attribute_alloc_size (2);
+extern char *xstrdup (const char *) __attribute_malloc__;
 
 #endif /* ! _LDCONFIG_H  */