Skip to content

Commit

Permalink
Optimize xmalloc, xcalloc, xrealloc, and xstrdup
Browse files Browse the repository at this point in the history
Add alloc_size attribute and apply consistently the malloc attribute
to xmalloc, xcalloc, xrealloc, and xstrdup.
  • Loading branch information
drepper committed Jan 9, 2012
1 parent aebae05 commit ec09c1c
Show file tree
Hide file tree
Showing 15 changed files with 86 additions and 44 deletions.
18 changes: 18 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
2012-01-08 Ulrich Drepper <[email protected]>

* 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 <[email protected]>

* stdio-common/vfscanf.c (_IO_vfscanf_internal): Use alloca when
Expand Down
11 changes: 7 additions & 4 deletions catgets/gencat.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
6 changes: 4 additions & 2 deletions elf/pldd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
8 changes: 5 additions & 3 deletions iconv/iconv_charmap.c
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, 2001.
Expand Down Expand Up @@ -33,8 +33,10 @@


/* 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
Expand Down
9 changes: 6 additions & 3 deletions iconv/iconvconfig.c
Original file line number Diff line number Diff line change
Expand Up @@ -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. */
Expand Down
5 changes: 3 additions & 2 deletions iconv/strtab.c
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, 2000.
This program is free software; you can redistribute it and/or modify
Expand Down Expand Up @@ -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. */
Expand Down
7 changes: 7 additions & 0 deletions include/sys/cdefs.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
5 changes: 3 additions & 2 deletions locale/programs/locale.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand Down
3 changes: 0 additions & 3 deletions locale/programs/localedef.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
13 changes: 8 additions & 5 deletions locale/programs/localedef.h
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, 1998.
Expand Down Expand Up @@ -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
Expand Down
8 changes: 5 additions & 3 deletions locale/programs/simple-hash.c
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, October 1994.
Expand Down Expand Up @@ -53,8 +53,10 @@
#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
{
Expand Down
7 changes: 1 addition & 6 deletions nscd/mem.c
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, 2004.
Expand Down Expand Up @@ -35,11 +35,6 @@
#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)
{
Expand Down
11 changes: 7 additions & 4 deletions nscd/nscd.h
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, 1998.
Expand Down Expand Up @@ -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__));
Expand Down
6 changes: 4 additions & 2 deletions nss/makedb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
13 changes: 8 additions & 5 deletions sysdeps/generic/ldconfig.h
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>, 1999.
Expand Down Expand Up @@ -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 */

0 comments on commit ec09c1c

Please sign in to comment.