This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]