This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH] Remove useless "if" before "free"
- From: Jim Meyering <jim at meyering dot net>
- To: libc-alpha at sourceware dot org
- Date: Sun, 10 Feb 2008 23:41:45 +0100
- Subject: [PATCH] Remove useless "if" before "free"
Since "free (NULL);" seems to be universally safe these
days (and especially so on glibc-based systems), you might
want to remove all of glibc's redundant "if-before-free" tests,
like this one in elf/ldconfig.c:
if (copy)
free (copy);
[assuming there's no special reason for the redundant test]
Sure, it's not a big deal, but it does make the code a tiny bit smaller,
and maybe even a tiny bit more readable (people won't wonder about
the test of such a pointer, when they know that free can handle a
NULL pointer).
The changes in the patch below were created by running this command
after a fresh "clone":
find . -name '*.c' -print0 | xargs -0 perl -0x3b -pi -e \
's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*NULL)?\s*\)\s+(free\s*\(\s*\1\s*\))/$2/s'
>From 07b096f5ab30b99f44b1a9c8c194ad9e82facc60 Mon Sep 17 00:00:00 2001
From: Jim Meyering <meyering@redhat.com>
Date: Sun, 10 Feb 2008 23:10:25 +0100
Subject: [PATCH] Remove useless "if" before "free":
* elf/ldconfig.c (parse_conf_include): Likewise.
* gmon/gmon.c (weak_alias): Likewise.
* iconv/gconv_conf.c (__gconv_get_path): Likewise.
* inet/rcmd.c (__validuser2_sa): Likewise.
* intl/bindtextdom.c (set_binding_values): Likewise.
* intl/loadmsgcat.c (_nl_load_domain, _nl_unload_domain): Likewise.
* libidn/stringprep.c (stringprep, stringprep_profile): Likewise.
* libio/genops.c (save_for_backup): Likewise.
* libio/wgenops.c (save_for_wbackup): Likewise.
* locale/programs/ld-collate.c (collate_read): Likewise.
* locale/programs/linereader.c (get_string): Likewise.
* nis/nss_compat/compat-pwd.c (give_pwd_free): Likewise.
* nis/nss_compat/compat-spwd.c (give_spwd_free): Likewise.
* resolv/res_debug.c (do_section): Likewise.
* sunrpc/xdr_sizeof.c (x_inline, xdr_sizeof): Likewise.
* sysdeps/mach/hurd/if_index.c (libc_hidden_def): Likewise.
* sysdeps/posix/sprofil.c (__sprofil): Likewise.
* time/lc-time-cleanup.c (_nl_cleanup_time): Likewise.
* time/tzset.c (tzset_internal): Likewise.
Signed-off-by: Jim Meyering <meyering@redhat.com>
---
ChangeLog | 23 +++++++++++++++++++++++
elf/ldconfig.c | 3 +--
gmon/gmon.c | 3 +--
iconv/gconv_conf.c | 3 +--
inet/rcmd.c | 3 +--
intl/bindtextdom.c | 3 +--
intl/loadmsgcat.c | 9 +++------
libidn/stringprep.c | 6 ++----
libio/genops.c | 3 +--
libio/wgenops.c | 3 +--
locale/programs/ld-collate.c | 12 ++++--------
locale/programs/linereader.c | 3 +--
nis/nss_compat/compat-pwd.c | 15 +++++----------
nis/nss_compat/compat-spwd.c | 6 ++----
resolv/res_debug.c | 3 +--
sunrpc/xdr_sizeof.c | 6 ++----
sysdeps/mach/hurd/if_index.c | 3 +--
sysdeps/posix/sprofil.c | 3 +--
time/lc-time-cleanup.c | 9 +++------
time/tzset.c | 3 +--
20 files changed, 56 insertions(+), 66 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 5108ede..bce25e0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,26 @@
+2008-02-10 Jim Meyering <meyering@redhat.com>
+
+ Remove useless "if" before "free":
+ * elf/ldconfig.c (parse_conf_include): Likewise.
+ * gmon/gmon.c (weak_alias): Likewise.
+ * iconv/gconv_conf.c (__gconv_get_path): Likewise.
+ * inet/rcmd.c (__validuser2_sa): Likewise.
+ * intl/bindtextdom.c (set_binding_values): Likewise.
+ * intl/loadmsgcat.c (_nl_load_domain, _nl_unload_domain): Likewise.
+ * libidn/stringprep.c (stringprep, stringprep_profile): Likewise.
+ * libio/genops.c (save_for_backup): Likewise.
+ * libio/wgenops.c (save_for_wbackup): Likewise.
+ * locale/programs/ld-collate.c (collate_read): Likewise.
+ * locale/programs/linereader.c (get_string): Likewise.
+ * nis/nss_compat/compat-pwd.c (give_pwd_free): Likewise.
+ * nis/nss_compat/compat-spwd.c (give_spwd_free): Likewise.
+ * resolv/res_debug.c (do_section): Likewise.
+ * sunrpc/xdr_sizeof.c (x_inline, xdr_sizeof): Likewise.
+ * sysdeps/mach/hurd/if_index.c (libc_hidden_def): Likewise.
+ * sysdeps/posix/sprofil.c (__sprofil): Likewise.
+ * time/lc-time-cleanup.c (_nl_cleanup_time): Likewise.
+ * time/tzset.c (tzset_internal): Likewise.
+
2008-02-10 Ulrich Drepper <drepper@redhat.com>
* sysdeps/unix/sysv/linux/sys/timerfd.h: New file.
diff --git a/elf/ldconfig.c b/elf/ldconfig.c
index 75ff79a..e4dfdf5 100644
--- a/elf/ldconfig.c
+++ b/elf/ldconfig.c
@@ -1184,8 +1184,7 @@ parse_conf_include (const char *config_file, unsigned int lineno,
break;
}
- if (copy)
- free (copy);
+ free (copy);
}
/* Honour LD_HWCAP_MASK. */
diff --git a/gmon/gmon.c b/gmon/gmon.c
index 1e94aab..8e2eddd 100644
--- a/gmon/gmon.c
+++ b/gmon/gmon.c
@@ -396,6 +396,5 @@ _mcleanup (void)
write_gmon ();
/* free the memory. */
- if (_gmonparam.tos != NULL)
- free (_gmonparam.tos);
+ free (_gmonparam.tos);
}
diff --git a/iconv/gconv_conf.c b/iconv/gconv_conf.c
index 22ffa4f..2023beb 100644
--- a/iconv/gconv_conf.c
+++ b/iconv/gconv_conf.c
@@ -529,8 +529,7 @@ __gconv_get_path (void)
__gconv_path_elem = result ?: (struct path_elem *) &empty_path_elem;
- if (cwd != NULL)
- free (cwd);
+ free (cwd);
}
__libc_lock_unlock (lock);
diff --git a/inet/rcmd.c b/inet/rcmd.c
index 341304a..5dcbd25 100644
--- a/inet/rcmd.c
+++ b/inet/rcmd.c
@@ -826,8 +826,7 @@ __validuser2_sa(hostf, ra, ralen, luser, ruser, rhost)
}
}
- if (buf != NULL)
- free (buf);
+ free (buf);
return retval;
}
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
index fd527a1..7a956d4 100644
--- a/intl/bindtextdom.c
+++ b/intl/bindtextdom.c
@@ -203,8 +203,7 @@ set_binding_values (domainname, dirnamep, codesetp)
if (__builtin_expect (result != NULL, 1))
{
- if (binding->codeset != NULL)
- free (binding->codeset);
+ free (binding->codeset);
binding->codeset = result;
modified = 1;
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
index 537fd60..3cba7b1 100644
--- a/intl/loadmsgcat.c
+++ b/intl/loadmsgcat.c
@@ -1236,8 +1236,7 @@ _nl_load_domain (domain_file, domainbinding)
/* This is an invalid revision. */
invalid:
/* This is an invalid .mo file. */
- if (domain->malloced)
- free (domain->malloced);
+ free (domain->malloced);
#ifdef HAVE_MMAP
if (use_mmap)
munmap ((caddr_t) data, size);
@@ -1289,12 +1288,10 @@ _nl_unload_domain (domain)
if (convd->conv != (__gconv_t) -1)
__gconv_close (convd->conv);
}
- if (domain->conversions != NULL)
- free (domain->conversions);
+ free (domain->conversions);
__libc_rwlock_fini (domain->conversions_lock);
- if (domain->malloced)
- free (domain->malloced);
+ free (domain->malloced);
# ifdef _POSIX_MAPPED_FILES
if (domain->use_mmap)
diff --git a/libidn/stringprep.c b/libidn/stringprep.c
index 6041e39..f5c9fae 100644
--- a/libidn/stringprep.c
+++ b/libidn/stringprep.c
@@ -366,8 +366,7 @@ stringprep (char *in,
do
{
- if (ucs4)
- free (ucs4);
+ free (ucs4);
ucs4 = stringprep_utf8_to_ucs4 (in, -1, &ucs4len);
maxucs4len = ucs4len + adducs4len;
uint32_t *newp = realloc (ucs4, maxucs4len * sizeof (uint32_t));
@@ -449,8 +448,7 @@ stringprep_profile (const char *in,
do
{
- if (str)
- free (str);
+ free (str);
str = (char *) malloc (len);
if (str == NULL)
return STRINGPREP_MALLOC_ERROR;
diff --git a/libio/genops.c b/libio/genops.c
index 7005fdb..481fbc5 100644
--- a/libio/genops.c
+++ b/libio/genops.c
@@ -300,8 +300,7 @@ save_for_backup (fp, end_p)
memcpy (new_buffer + avail,
fp->_IO_read_base + least_mark,
needed_size);
- if (fp->_IO_save_base)
- free (fp->_IO_save_base);
+ free (fp->_IO_save_base);
fp->_IO_save_base = new_buffer;
fp->_IO_save_end = new_buffer + avail + needed_size;
}
diff --git a/libio/wgenops.c b/libio/wgenops.c
index 760a413..e2adedd 100644
--- a/libio/wgenops.c
+++ b/libio/wgenops.c
@@ -553,8 +553,7 @@ save_for_wbackup (fp, end_p)
needed_size * sizeof (wchar_t));
#endif
}
- if (fp->_wide_data->_IO_save_base)
- free (fp->_wide_data->_IO_save_base);
+ free (fp->_wide_data->_IO_save_base);
fp->_wide_data->_IO_save_base = new_buffer;
fp->_wide_data->_IO_save_end = new_buffer + avail + needed_size;
}
diff --git a/locale/programs/ld-collate.c b/locale/programs/ld-collate.c
index 227e764..f72516c 100644
--- a/locale/programs/ld-collate.c
+++ b/locale/programs/ld-collate.c
@@ -2963,10 +2963,8 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
col_elem_free:
if (symbol != NULL)
free ((char *) symbol);
- if (arg->val.str.startmb != NULL)
- free (arg->val.str.startmb);
- if (arg->val.str.startwc != NULL)
- free (arg->val.str.startwc);
+ free (arg->val.str.startmb);
+ free (arg->val.str.startwc);
}
lr_ignore_rest (ldfile, 1);
}
@@ -3112,10 +3110,8 @@ collate_read (struct linereader *ldfile, struct localedef_t *result,
else
{
col_sym_free:
- if (symbol != NULL)
- free (symbol);
- if (endsymbol != NULL)
- free (endsymbol);
+ free (symbol);
+ free (endsymbol);
}
}
break;
diff --git a/locale/programs/linereader.c b/locale/programs/linereader.c
index 8a04e32..2e20e5d 100644
--- a/locale/programs/linereader.c
+++ b/locale/programs/linereader.c
@@ -859,8 +859,7 @@ non-symbolic character value should not be used"));
if (illegal_string)
{
free (buf);
- if (buf2 != NULL)
- free (buf2);
+ free (buf2);
lr->token.val.str.startmb = NULL;
lr->token.val.str.lenmb = 0;
lr->token.val.str.startwc = NULL;
diff --git a/nis/nss_compat/compat-pwd.c b/nis/nss_compat/compat-pwd.c
index df8f91e..669522f 100644
--- a/nis/nss_compat/compat-pwd.c
+++ b/nis/nss_compat/compat-pwd.c
@@ -116,16 +116,11 @@ init_nss_interface (void)
static void
give_pwd_free (struct passwd *pwd)
{
- if (pwd->pw_name != NULL)
- free (pwd->pw_name);
- if (pwd->pw_passwd != NULL)
- free (pwd->pw_passwd);
- if (pwd->pw_gecos != NULL)
- free (pwd->pw_gecos);
- if (pwd->pw_dir != NULL)
- free (pwd->pw_dir);
- if (pwd->pw_shell != NULL)
- free (pwd->pw_shell);
+ free (pwd->pw_name);
+ free (pwd->pw_passwd);
+ free (pwd->pw_gecos);
+ free (pwd->pw_dir);
+ free (pwd->pw_shell);
memset (pwd, '\0', sizeof (struct passwd));
}
diff --git a/nis/nss_compat/compat-spwd.c b/nis/nss_compat/compat-spwd.c
index a597768..95f7355 100644
--- a/nis/nss_compat/compat-spwd.c
+++ b/nis/nss_compat/compat-spwd.c
@@ -113,10 +113,8 @@ init_nss_interface (void)
static void
give_spwd_free (struct spwd *pwd)
{
- if (pwd->sp_namp != NULL)
- free (pwd->sp_namp);
- if (pwd->sp_pwdp != NULL)
- free (pwd->sp_pwdp);
+ free (pwd->sp_namp);
+ free (pwd->sp_pwdp);
memset (pwd, '\0', sizeof (struct spwd));
pwd->sp_warn = -1;
diff --git a/resolv/res_debug.c b/resolv/res_debug.c
index d9f1607..cd69d4f 100644
--- a/resolv/res_debug.c
+++ b/resolv/res_debug.c
@@ -204,8 +204,7 @@ do_section(const res_state statp,
rrnum++;
}
cleanup:
- if (buf != NULL)
- free(buf);
+ free(buf);
}
/*
diff --git a/sunrpc/xdr_sizeof.c b/sunrpc/xdr_sizeof.c
index aaf25e9..dc3e19e 100644
--- a/sunrpc/xdr_sizeof.c
+++ b/sunrpc/xdr_sizeof.c
@@ -86,8 +86,7 @@ x_inline (XDR *xdrs, u_int len)
else
{
/* Free the earlier space and allocate new area */
- if (xdrs->x_private)
- free (xdrs->x_private);
+ free (xdrs->x_private);
if ((xdrs->x_private = (caddr_t) malloc (len)) == NULL)
{
xdrs->x_base = 0;
@@ -157,7 +156,6 @@ xdr_sizeof (xdrproc_t func, void *data)
x.x_base = (caddr_t) 0;
stat = func (&x, data);
- if (x.x_private)
- free (x.x_private);
+ free (x.x_private);
return stat == TRUE ? x.x_handy : 0;
}
diff --git a/sysdeps/mach/hurd/if_index.c b/sysdeps/mach/hurd/if_index.c
index 664a3a1..4ecda22 100644
--- a/sysdeps/mach/hurd/if_index.c
+++ b/sysdeps/mach/hurd/if_index.c
@@ -59,8 +59,7 @@ if_freenameindex (struct if_nameindex *ifn)
struct if_nameindex *ptr = ifn;
while (ptr->if_name || ptr->if_index)
{
- if (ptr->if_name)
- free (ptr->if_name);
+ free (ptr->if_name);
++ptr;
}
free (ifn);
diff --git a/sysdeps/posix/sprofil.c b/sysdeps/posix/sprofil.c
index 853038d..6ffce4d 100644
--- a/sysdeps/posix/sprofil.c
+++ b/sysdeps/posix/sprofil.c
@@ -322,8 +322,7 @@ __sprofil (struct prof *profp, int profcnt, struct timeval *tvp,
for (i = 0; i < profcnt; ++i)
if (add_region (p[i], (flags & PROF_UINT) != 0) < 0)
{
- if (prof_info.region)
- free (prof_info.region);
+ free (prof_info.region);
prof_info.num_regions = 0;
prof_info.region = NULL;
return -1;
diff --git a/time/lc-time-cleanup.c b/time/lc-time-cleanup.c
index 7972700..6777f48 100644
--- a/time/lc-time-cleanup.c
+++ b/time/lc-time-cleanup.c
@@ -29,12 +29,9 @@ _nl_cleanup_time (struct locale_data *locale)
locale->private.time = NULL;
locale->private.cleanup = NULL;
- if (data->eras != NULL)
- free (data->eras);
- if (data->alt_digits != NULL)
- free (data->alt_digits);
- if (data->walt_digits != NULL)
- free (data->walt_digits);
+ free (data->eras);
+ free (data->alt_digits);
+ free (data->walt_digits);
free (data);
}
diff --git a/time/tzset.c b/time/tzset.c
index 0d54202..a6fed4a 100644
--- a/time/tzset.c
+++ b/time/tzset.c
@@ -414,8 +414,7 @@ tzset_internal (always, explicit)
tz_rules[1].name = NULL;
/* Save the value of `tz'. */
- if (old_tz != NULL)
- free (old_tz);
+ free (old_tz);
old_tz = tz ? __strdup (tz) : NULL;
/* Try to read a data file. */
--
1.5.4.1.35.g882c