From 0f6cb93a0910de6e142971b81d3717c26d94e860 Mon Sep 17 00:00:00 2001
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Thu, 21 Aug 2014 20:51:02 +0200
Subject: [PATCH] Bug #165: Deletion of unnecessary null pointer checks

The function "free" performs input parameter validation.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/free.html

It is therefore not needed to check a passed pointer before this function call.
A corresponding update suggestion was generated by the software "Coccinelle"
from the following semantic patch approach.
http://coccinelle.lip6.fr/

@Remove_unnecessary_pointer_checks1@
expression x;
@@
-if (x != \(0 \| NULL\))
    free(x);

@Remove_unnecessary_pointer_checks2@
expression x;
@@
-if (x != \(0 \| NULL\)) {
    free(x);
    x = \(0 \| NULL\);
-}

@Remove_unnecessary_pointer_checks3@
expression a, b;
@@
-if (a != \(0 \| NULL\) && b != \(0 \| NULL\))
+if (a)
    free(b);

@Remove_unnecessary_pointer_checks4@
expression a, b;
@@
-if (a != \(0 \| NULL\) && b != \(0 \| NULL\)) {
+if (a) {
    free(b);
    b = \(0 \| NULL\);
 }

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 main.c   |  3 +--
 thumbs.c |  9 +++------
 util.c   | 17 ++++++-----------
 3 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/main.c b/main.c
index 070d419..821f63b 100644
--- a/main.c
+++ b/main.c
@@ -810,8 +810,7 @@ int main(int argc, char **argv)
 				filename[len-1] = '\0';
 			check_add_file(filename);
 		}
-		if (filename != NULL)
-			free(filename);
+		free(filename);
 	}
 
 	for (i = 0; i < options->filecnt; i++) {
diff --git a/thumbs.c b/thumbs.c
index ea91292..3f13af0 100644
--- a/thumbs.c
+++ b/thumbs.c
@@ -176,8 +176,7 @@ void tns_init(tns_t *tns, const fileinfo_t *files, int cnt, int *sel, win_t *win
 		dsuffix = "/.cache";
 	}
 	if (homedir != NULL) {
-		if (cache_dir != NULL)
-			free(cache_dir);
+		free(cache_dir);
 		len = strlen(homedir) + strlen(dsuffix) + 6;
 		cache_dir = (char*) s_malloc(len);
 		snprintf(cache_dir, len, "%s%s/sxiv", homedir, dsuffix);
@@ -204,10 +203,8 @@ void tns_free(tns_t *tns)
 		tns->thumbs = NULL;
 	}
 
-	if (cache_dir != NULL) {
-		free(cache_dir);
-		cache_dir = NULL;
-	}
+	free(cache_dir);
+	cache_dir = NULL;
 }
 
 bool tns_load(tns_t *tns, int n, bool force)
diff --git a/util.c b/util.c
index c7b3bc8..3a5ae9a 100644
--- a/util.c
+++ b/util.c
@@ -198,18 +198,13 @@ char* absolute_path(const char *filename)
 	goto end;
 
 error:
-	if (path != NULL) {
-		free(path);
-		path = NULL;
-	}
+	free(path);
+	path = NULL;
 
 end:
-	if (dirname != NULL)
-		free(dirname);
-	if (cwd != NULL)
-		free(cwd);
-	if (twd != NULL)
-		free(twd);
+	free(dirname);
+	free(cwd);
+	free(twd);
 
 	return path;
 }
@@ -254,7 +249,7 @@ int r_closedir(r_dir_t *rdir)
 			rdir->dir = NULL;
 	}
 
-	if (rdir->d != 0 && rdir->name != NULL) {
+	if (rdir->d != 0) {
 		free(rdir->name);
 		rdir->name = NULL;
 	}