Optimize xmalloc, xcalloc, xrealloc, and xstrdup

Add alloc_size attribute and apply consistently the malloc attribute
to xmalloc, xcalloc, xrealloc, and xstrdup.
This commit is contained in:
Ulrich Drepper 2012-01-08 21:19:43 -05:00
parent aebae0537d
commit ec09c1c410
15 changed files with 86 additions and 44 deletions

View File

@ -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> 2012-01-05 Paul Pluzhnikov <ppluzhnikov@google.com>
* stdio-common/vfscanf.c (_IO_vfscanf_internal): Use alloca when * stdio-common/vfscanf.c (_IO_vfscanf_internal): Use alloca when

View File

@ -138,10 +138,13 @@ static struct argp argp =
/* Wrapper functions with error checking for standard functions. */ /* Wrapper functions with error checking for standard functions. */
extern void *xmalloc (size_t n); extern void *xmalloc (size_t n)
extern void *xcalloc (size_t n, size_t s); __attribute_malloc__ __attribute_alloc_size (1);
extern void *xrealloc (void *o, size_t n); extern void *xcalloc (size_t n, size_t s)
extern char *xstrdup (const char *); __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. */ /* Prototypes for local functions. */
static void error_print (void); static void error_print (void);

View File

@ -44,8 +44,10 @@ extern char *program_invocation_short_name;
#define PACKAGE _libc_intl_domainname #define PACKAGE _libc_intl_domainname
/* External functions. */ /* External functions. */
extern void *xmalloc (size_t n); extern void *xmalloc (size_t n)
extern void *xrealloc (void *p, 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. */ /* Name and version of program. */
static void print_version (FILE *stream, struct argp_state *state); static void print_version (FILE *stream, struct argp_state *state);

View File

@ -1,5 +1,5 @@
/* Convert using charmaps and possibly iconv(). /* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2001. Contributed by Ulrich Drepper <drepper@redhat.com>, 2001.
@ -33,8 +33,10 @@
/* Prototypes for a few program-wide used functions. */ /* Prototypes for a few program-wide used functions. */
extern void *xmalloc (size_t __n); extern void *xmalloc (size_t n)
extern void *xcalloc (size_t __n, size_t __s); __attribute_malloc__ __attribute_alloc_size (1);
extern void *xcalloc (size_t n, size_t s)
__attribute_malloc__ __attribute_alloc_size (1, 2);
struct convtable struct convtable

View File

@ -248,9 +248,12 @@ static struct
static const char gconv_module_ext[] = MODULE_EXT; static const char gconv_module_ext[] = MODULE_EXT;
extern void *xmalloc (size_t n) __attribute_malloc__; extern void *xmalloc (size_t n)
extern void *xcalloc (size_t n, size_t m) __attribute_malloc__; __attribute_malloc__ __attribute_alloc_size (1);
extern void *xrealloc (void *p, size_t n); 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. */ /* C string table handling. */

View File

@ -1,5 +1,5 @@
/* C string table handling. /* 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. Written by Ulrich Drepper <drepper@redhat.com>, 2000.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -66,7 +66,8 @@ struct Strtab
static size_t ps; 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 /* Prototypes for our functions that are used from iconvconfig.c. If
you change these, change also iconvconfig.c. */ you change these, change also iconvconfig.c. */

View File

@ -12,4 +12,11 @@ extern void __chk_fail (void) __attribute__ ((__noreturn__));
libc_hidden_proto (__chk_fail) libc_hidden_proto (__chk_fail)
rtld_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 #endif

View File

@ -44,8 +44,9 @@
#include "charmap-dir.h" #include "charmap-dir.h"
#include "../locarchive.h" #include "../locarchive.h"
extern void *xmalloc (size_t __n); extern void *xmalloc (size_t n)
extern char *xstrdup (const char *__str); __attribute_malloc__ __attribute_alloc_size (1);
extern char *xstrdup (const char *) __attribute_malloc__;
#define ARCHIVE_NAME LOCALEDIR "/locale-archive" #define ARCHIVE_NAME LOCALEDIR "/locale-archive"

View File

@ -169,9 +169,6 @@ static struct argp argp =
}; };
/* Prototypes for global functions. */
extern void *xmalloc (size_t __n);
/* Prototypes for local functions. */ /* Prototypes for local functions. */
static void error_print (void); static void error_print (void);
static const char *construct_output_path (char *path); static const char *construct_output_path (char *path);

View File

@ -1,5 +1,5 @@
/* General definitions for localedef(1). /* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998. 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. */ /* Prototypes for a few program-wide used functions. */
extern void *xmalloc (size_t __n); extern void *xmalloc (size_t n)
extern void *xcalloc (size_t __n, size_t __size); __attribute_malloc__ __attribute_alloc_size (1);
extern void *xrealloc (void *__p, size_t __n); extern void *xcalloc (size_t n, size_t s)
extern char *xstrdup (const char *__str); __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 /* Wrapper to switch LC_CTYPE back to the locale specified in the

View File

@ -1,5 +1,5 @@
/* Implement simple hashing table with string based keys. /* 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. This file is part of the GNU C Library.
Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, October 1994. Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, October 1994.
@ -53,8 +53,10 @@
#define hashval_t uint32_t #define hashval_t uint32_t
#include "hashval.h" #include "hashval.h"
extern void *xmalloc (size_t __n); extern void *xmalloc (size_t n)
extern void *xcalloc (size_t __n, size_t __m); __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 typedef struct hash_entry
{ {

View File

@ -1,5 +1,5 @@
/* Cache memory handling. /* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2004. Contributed by Ulrich Drepper <drepper@redhat.com>, 2004.
@ -35,11 +35,6 @@
#include "nscd.h" #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 static int
sort_he (const void *p1, const void *p2) sort_he (const void *p1, const void *p2)
{ {

View 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. This file is part of the GNU C Library.
Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998. Contributed by Thorsten Kukuk <kukuk@suse.de>, 1998.
@ -201,9 +201,12 @@ extern gid_t old_gid;
/* Prototypes for global functions. */ /* Prototypes for global functions. */
/* Wrapper functions with error checking for standard functions. */ /* Wrapper functions with error checking for standard functions. */
extern void *xmalloc (size_t n); extern void *xmalloc (size_t n)
extern void *xcalloc (size_t n, size_t s); __attribute_malloc__ __attribute_alloc_size (1);
extern void *xrealloc (void *o, size_t n); 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 */ /* nscd.c */
extern void termination_handler (int signum) __attribute__ ((__noreturn__)); extern void termination_handler (int signum) __attribute__ ((__noreturn__));

View File

@ -167,8 +167,10 @@ static void reset_file_creation_context (void);
/* External functions. */ /* External functions. */
extern void *xmalloc (size_t n) __attribute_malloc__; extern void *xmalloc (size_t n)
extern void *xcalloc (size_t n, size_t m) __attribute_malloc__; __attribute_malloc__ __attribute_alloc_size (1);
extern void *xcalloc (size_t n, size_t s)
__attribute_malloc__ __attribute_alloc_size (1, 2);
int int

View 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. This file is part of the GNU C Library.
Contributed by Andreas Jaeger <aj@suse.de>, 1999. Contributed by Andreas Jaeger <aj@suse.de>, 1999.
@ -81,9 +81,12 @@ extern int opt_verbose;
extern int opt_format; extern int opt_format;
/* Prototypes for a few program-wide used functions. */ /* Prototypes for a few program-wide used functions. */
extern void *xmalloc (size_t __n); extern void *xmalloc (size_t n)
extern void *xcalloc (size_t __n, size_t __size); __attribute_malloc__ __attribute_alloc_size (1);
extern void *xrealloc (void *__p, size_t __n); extern void *xcalloc (size_t n, size_t s)
extern char *xstrdup (const char *__str); __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 */ #endif /* ! _LDCONFIG_H */