Subject: Re: [PATCH 01/23] contrib/coccinnelle: add equals-null.cocci

From: Junio C Hamano <[email-masked]>
Date: Sat, 30 Apr 2022 17:20:03 -0700

What I found curious is that the result of applying these patches to
v2.36.0 and running coccicheck reveals that we are not making the
codebase clean wrt this new coccinelle rule.

diff -u -p a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c
--- a/compat/fsmonitor/fsm-listen-darwin.c
+++ b/compat/fsmonitor/fsm-listen-darwin.c
@@ -342,7 +342,7 @@ int fsm_listen__ctor(struct fsmonitor_da
 					   data->cfar_paths_to_watch,
 					   kFSEventStreamEventIdSinceNow,
 					   0.001, flags);
-	if (data->stream == NULL)
+	if (!data->stream)
 		goto failed;
 
 	/*
diff -u -p a/compat/mingw.c b/compat/mingw.c
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1060,7 +1060,7 @@ char *mingw_mktemp(char *template)
 int mkstemp(char *template)
 {
 	char *filename = mktemp(template);
-	if (filename == NULL)
+	if (!filename)
 		return -1;
 	return open(filename, O_RDWR | O_CREAT, 0600);
 }
@@ -2332,7 +2332,7 @@ int setitimer(int type, struct itimerval
 	static const struct timeval zero;
 	static int atexit_done;
 
-	if (out != NULL)
+	if (out)
 		return errno = EINVAL,
 			error("setitimer param 3 != NULL not implemented");
 	if (!is_timeval_eq(&in->it_interval, &zero) &&
@@ -2361,7 +2361,7 @@ int sigaction(int sig, struct sigaction
 	if (sig != SIGALRM)
 		return errno = EINVAL,
 			error("sigaction only implemented for SIGALRM");
-	if (out != NULL)
+	if (out)
 		return errno = EINVAL,
 			error("sigaction: param 3 != NULL not implemented");
 
diff -u -p a/compat/mkdir.c b/compat/mkdir.c
--- a/compat/mkdir.c
+++ b/compat/mkdir.c
@@ -9,7 +9,7 @@ int compat_mkdir_wo_trailing_slash(const
 	size_t len = strlen(dir);
 
 	if (len && dir[len-1] == '/') {
-		if ((tmp_dir = strdup(dir)) == NULL)
+		if (!(tmp_dir = strdup(dir)))
 			return -1;
 		tmp_dir[len-1] = '\0';
 	}
diff -u -p a/compat/mmap.c b/compat/mmap.c
--- a/compat/mmap.c
+++ b/compat/mmap.c
@@ -13,7 +13,7 @@ void *git_mmap(void *start, size_t lengt
 	}
 
 	start = malloc(length);
-	if (start == NULL) {
+	if (!start) {
 		errno = ENOMEM;
 		return MAP_FAILED;
 	}
diff -u -p a/compat/mingw.c b/compat/mingw.c
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1060,7 +1060,7 @@ char *mingw_mktemp(char *template)
 int mkstemp(char *template)
 {
 	char *filename = mktemp(template);
-	if (filename == NULL)
+	if (!filename)
 		return -1;
 	return open(filename, O_RDWR | O_CREAT, 0600);
 }
@@ -2332,7 +2332,7 @@ int setitimer(int type, struct itimerval
 	static const struct timeval zero;
 	static int atexit_done;
 
-	if (out != NULL)
+	if (out)
 		return errno = EINVAL,
 			error("setitimer param 3 != NULL not implemented");
 	if (!is_timeval_eq(&in->it_interval, &zero) &&
@@ -2361,7 +2361,7 @@ int sigaction(int sig, struct sigaction
 	if (sig != SIGALRM)
 		return errno = EINVAL,
 			error("sigaction only implemented for SIGALRM");
-	if (out != NULL)
+	if (out)
 		return errno = EINVAL,
 			error("sigaction: param 3 != NULL not implemented");
 
diff -u -p a/config.c b/config.c
--- a/config.c
+++ b/config.c
@@ -3190,7 +3190,7 @@ int git_config_set_multivar_in_file_gent
 			goto out_free;
 		}
 		/* if nothing to unset, error out */
-		if (value == NULL) {
+		if (!value) {
 			ret = CONFIG_NOTHING_SET;
 			goto out_free;
 		}
@@ -3206,7 +3206,7 @@ int git_config_set_multivar_in_file_gent
 		int i, new_line = 0;
 		struct config_options opts;
 
-		if (value_pattern == NULL)
+		if (!value_pattern)
 			store.value_pattern = NULL;
 		else if (value_pattern == CONFIG_REGEX_NONE)
 			store.value_pattern = CONFIG_REGEX_NONE;
@@ -3346,7 +3346,7 @@ int git_config_set_multivar_in_file_gent
 		}
 
 		/* write the pair (value == NULL means unset) */
-		if (value != NULL) {
+		if (value) {
 			if (!store.section_seen) {
 				if (write_section(fd, key, &store) < 0)
 					goto write_err_out;
@@ -3567,7 +3567,7 @@ static int git_config_copy_or_rename_sec
 			offset = section_name_match(&buf[i], old_name);
 			if (offset > 0) {
 				ret++;
-				if (new_name == NULL) {
+				if (!new_name) {
 					remove = 1;
 					continue;
 				}
diff -u -p a/daemon.c b/daemon.c
--- a/daemon.c
+++ b/daemon.c
@@ -447,7 +447,7 @@ static void copy_to_log(int fd)
 	FILE *fp;
 
 	fp = fdopen(fd, "r");
-	if (fp == NULL) {
+	if (!fp) {
 		logerror("fdopen of error channel failed");
 		close(fd);
 		return;
diff -u -p a/dir.c b/dir.c
--- a/dir.c
+++ b/dir.c
@@ -3054,7 +3054,7 @@ char *git_url_basename(const char *repo,
 	 * Skip scheme.
 	 */
 	start = strstr(repo, "://");
-	if (start == NULL)
+	if (!start)
 		start = repo;
 	else
 		start += 3;
diff -u -p a/ewah/bitmap.c b/ewah/bitmap.c
--- a/ewah/bitmap.c
+++ b/ewah/bitmap.c
@@ -223,7 +223,7 @@ void bitmap_reset(struct bitmap *bitmap)
 
 void bitmap_free(struct bitmap *bitmap)
 {
-	if (bitmap == NULL)
+	if (!bitmap)
 		return;
 
 	free(bitmap->words);
diff -u -p a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c
--- a/ewah/ewah_bitmap.c
+++ b/ewah/ewah_bitmap.c
@@ -451,7 +451,7 @@ struct ewah_bitmap *ewah_pool_new(void)
 
 void ewah_pool_free(struct ewah_bitmap *self)
 {
-	if (self == NULL)
+	if (!self)
 		return;
 
 	if (bitmap_pool_size == BITMAP_POOL_MAX ||
diff -u -p a/http-fetch.c b/http-fetch.c
--- a/http-fetch.c
+++ b/http-fetch.c
@@ -55,7 +55,7 @@ static void fetch_single_packfile(struct
 	http_init(NULL, url, 0);
 
 	preq = new_direct_http_pack_request(packfile_hash->hash, xstrdup(url));
-	if (preq == NULL)
+	if (!preq)
 		die("couldn't create http pack request");
 	preq->slot->results = &results;
 	preq->index_pack_args = index_pack_args;
diff -u -p a/http-push.c b/http-push.c
--- a/http-push.c
+++ b/http-push.c
@@ -253,7 +253,7 @@ static void start_fetch_loose(struct tra
 	struct http_object_request *obj_req;
 
 	obj_req = new_http_object_request(repo->url, &request->obj->oid);
-	if (obj_req == NULL) {
+	if (!obj_req) {
 		request->state = ABORTED;
 		return;
 	}
@@ -318,7 +318,7 @@ static void start_fetch_packed(struct tr
 	fprintf(stderr, " which contains %s\n", oid_to_hex(&request->obj->oid));
 
 	preq = new_http_pack_request(target->hash, repo->url);
-	if (preq == NULL) {
+	if (!preq) {
 		repo->can_update_info_refs = 0;
 		return;
 	}
@@ -520,7 +520,7 @@ static void finish_request(struct transf
 	/* Keep locks active */
 	check_locks();
 
-	if (request->headers != NULL)
+	if (request->headers)
 		curl_slist_free_all(request->headers);
 
 	/* URL is reused for MOVE after PUT and used during FETCH */
@@ -783,7 +783,7 @@ xml_start_tag(void *userData, const char
 	const char *c = strchr(name, ':');
 	int old_namelen, new_len;
 
-	if (c == NULL)
+	if (!c)
 		c = name;
 	else
 		c++;
@@ -811,7 +811,7 @@ xml_end_tag(void *userData, const char *
 
 	ctx->userFunc(ctx, 1);
 
-	if (c == NULL)
+	if (!c)
 		c = name;
 	else
 		c++;
@@ -1893,7 +1893,7 @@ int cmd_main(int argc, const char **argv
 
 		/* Lock remote branch ref */
 		ref_lock = lock_remote(ref->name, LOCK_TIME);
-		if (ref_lock == NULL) {
+		if (!ref_lock) {
 			fprintf(stderr, "Unable to lock remote branch %s\n",
 				ref->name);
 			if (helper_status)
diff -u -p a/http-walker.c b/http-walker.c
--- a/http-walker.c
+++ b/http-walker.c
@@ -59,7 +59,7 @@ static void start_object_request(struct
 	struct http_object_request *req;
 
 	req = new_http_object_request(obj_req->repo->base, &obj_req->oid);
-	if (req == NULL) {
+	if (!req) {
 		obj_req->state = ABORTED;
 		return;
 	}
@@ -106,7 +106,7 @@ static void process_object_response(void
 	/* Use alternates if necessary */
 	if (missing_target(obj_req->req)) {
 		fetch_alternates(walker, alt->base);
-		if (obj_req->repo->next != NULL) {
+		if (obj_req->repo->next) {
 			obj_req->repo =
 				obj_req->repo->next;
 			release_http_object_request(obj_req->req);
@@ -225,12 +225,12 @@ static void process_alternates_response(
 					 alt_req->url->buf);
 			active_requests++;
 			slot->in_use = 1;
-			if (slot->finished != NULL)
+			if (slot->finished)
 				(*slot->finished) = 0;
 			if (!start_active_slot(slot)) {
 				cdata->got_alternates = -1;
 				slot->in_use = 0;
-				if (slot->finished != NULL)
+				if (slot->finished)
 					(*slot->finished) = 1;
 			}
 			return;
@@ -443,7 +443,7 @@ static int http_fetch_pack(struct walker
 	}
 
 	preq = new_http_pack_request(target->hash, repo->base);
-	if (preq == NULL)
+	if (!preq)
 		goto abort;
 	preq->slot->results = &results;
 
@@ -489,11 +489,11 @@ static int fetch_object(struct walker *w
 		if (hasheq(obj_req->oid.hash, hash))
 			break;
 	}
-	if (obj_req == NULL)
+	if (!obj_req)
 		return error("Couldn't find request for %s in the queue", hex);
 
 	if (has_object_file(&obj_req->oid)) {
-		if (obj_req->req != NULL)
+		if (obj_req->req)
 			abort_http_object_request(obj_req->req);
 		abort_object_request(obj_req);
 		return 0;
diff -u -p a/http.c b/http.c
--- a/http.c
+++ b/http.c
@@ -197,11 +197,11 @@ static void finish_active_slot(struct ac
 	closedown_active_slot(slot);
 	curl_easy_getinfo(slot->curl, CURLINFO_HTTP_CODE, &slot->http_code);
 
-	if (slot->finished != NULL)
+	if (slot->finished)
 		(*slot->finished) = 1;
 
 	/* Store slot results so they can be read after the slot is reused */
-	if (slot->results != NULL) {
+	if (slot->results) {
 		slot->results->curl_result = slot->curl_result;
 		slot->results->http_code = slot->http_code;
 		curl_easy_getinfo(slot->curl, CURLINFO_HTTPAUTH_AVAIL,
@@ -212,7 +212,7 @@ static void finish_active_slot(struct ac
 	}
 
 	/* Run callback if appropriate */
-	if (slot->callback_func != NULL)
+	if (slot->callback_func)
 		slot->callback_func(slot->callback_data);
 }
 
@@ -234,7 +234,7 @@ static void process_curl_messages(void)
 			while (slot != NULL &&
 			       slot->curl != curl_message->easy_handle)
 				slot = slot->next;
-			if (slot != NULL) {
+			if (slot) {
 				xmulti_remove_handle(slot);
 				slot->curl_result = curl_result;
 				finish_active_slot(slot);
@@ -838,16 +838,16 @@ static CURL *get_curl_handle(void)
 		curl_easy_setopt(result, CURLOPT_SSL_CIPHER_LIST,
 				ssl_cipherlist);
 
-	if (ssl_cert != NULL)
+	if (ssl_cert)
 		curl_easy_setopt(result, CURLOPT_SSLCERT, ssl_cert);
 	if (has_cert_password())
 		curl_easy_setopt(result, CURLOPT_KEYPASSWD, cert_auth.password);
-	if (ssl_key != NULL)
+	if (ssl_key)
 		curl_easy_setopt(result, CURLOPT_SSLKEY, ssl_key);
-	if (ssl_capath != NULL)
+	if (ssl_capath)
 		curl_easy_setopt(result, CURLOPT_CAPATH, ssl_capath);
 #ifdef GIT_CURL_HAVE_CURLOPT_PINNEDPUBLICKEY
-	if (ssl_pinnedkey != NULL)
+	if (ssl_pinnedkey)
 		curl_easy_setopt(result, CURLOPT_PINNEDPUBLICKEY, ssl_pinnedkey);
 #endif
 	if (http_ssl_backend && !strcmp("schannel", http_ssl_backend) &&
@@ -857,10 +857,10 @@ static CURL *get_curl_handle(void)
 		curl_easy_setopt(result, CURLOPT_PROXY_CAINFO, NULL);
 #endif
 	} else if (ssl_cainfo != NULL || http_proxy_ssl_ca_info != NULL) {
-		if (ssl_cainfo != NULL)
+		if (ssl_cainfo)
 			curl_easy_setopt(result, CURLOPT_CAINFO, ssl_cainfo);
 #ifdef GIT_CURL_HAVE_CURLOPT_PROXY_CAINFO
-		if (http_proxy_ssl_ca_info != NULL)
+		if (http_proxy_ssl_ca_info)
 			curl_easy_setopt(result, CURLOPT_PROXY_CAINFO, http_proxy_ssl_ca_info);
 #endif
 	}
@@ -1050,7 +1050,7 @@ void http_init(struct remote *remote, co
 
 	{
 		char *http_max_requests = getenv("GIT_HTTP_MAX_REQUESTS");
-		if (http_max_requests != NULL)
+		if (http_max_requests)
 			max_requests = atoi(http_max_requests);
 	}
 
@@ -1069,10 +1069,10 @@ void http_init(struct remote *remote, co
 	set_from_env(&user_agent, "GIT_HTTP_USER_AGENT");
 
 	low_speed_limit = getenv("GIT_HTTP_LOW_SPEED_LIMIT");
-	if (low_speed_limit != NULL)
+	if (low_speed_limit)
 		curl_low_speed_limit = strtol(low_speed_limit, NULL, 10);
 	low_speed_time = getenv("GIT_HTTP_LOW_SPEED_TIME");
-	if (low_speed_time != NULL)
+	if (low_speed_time)
 		curl_low_speed_time = strtol(low_speed_time, NULL, 10);
 
 	if (curl_ssl_verify == -1)
@@ -1109,7 +1109,7 @@ void http_cleanup(void)
 
 	while (slot != NULL) {
 		struct active_request_slot *next = slot->next;
-		if (slot->curl != NULL) {
+		if (slot->curl) {
 			xmulti_remove_handle(slot);
 			curl_easy_cleanup(slot->curl);
 		}
@@ -1147,13 +1147,13 @@ void http_cleanup(void)
 	free((void *)http_proxy_authmethod);
 	http_proxy_authmethod = NULL;
 
-	if (cert_auth.password != NULL) {
+	if (cert_auth.password) {
 		memset(cert_auth.password, 0, strlen(cert_auth.password));
 		FREE_AND_NULL(cert_auth.password);
 	}
 	ssl_cert_password_required = 0;
 
-	if (proxy_cert_auth.password != NULL) {
+	if (proxy_cert_auth.password) {
 		memset(proxy_cert_auth.password, 0, strlen(proxy_cert_auth.password));
 		FREE_AND_NULL(proxy_cert_auth.password);
 	}
@@ -1179,14 +1179,14 @@ struct active_request_slot *get_active_s
 	while (slot != NULL && slot->in_use)
 		slot = slot->next;
 
-	if (slot == NULL) {
+	if (!slot) {
 		newslot = xmalloc(sizeof(*newslot));
 		newslot->curl = NULL;
 		newslot->in_use = 0;
 		newslot->next = NULL;
 
 		slot = active_queue_head;
-		if (slot == NULL) {
+		if (!slot) {
 			active_queue_head = newslot;
 		} else {
 			while (slot->next != NULL)
@@ -1196,7 +1196,7 @@ struct active_request_slot *get_active_s
 		slot = newslot;
 	}
 
-	if (slot->curl == NULL) {
+	if (!slot->curl) {
 		slot->curl = curl_easy_duphandle(curl_default);
 		curl_session_count++;
 	}
@@ -1768,7 +1768,7 @@ static int http_request(const char *url,
 	slot = get_active_slot();
 	curl_easy_setopt(slot->curl, CURLOPT_HTTPGET, 1);
 
-	if (result == NULL) {
+	if (!result) {
 		curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 1);
 	} else {
 		curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
@@ -2100,7 +2100,7 @@ cleanup:
 
 void release_http_pack_request(struct http_pack_request *preq)
 {
-	if (preq->packfile != NULL) {
+	if (preq->packfile) {
 		fclose(preq->packfile);
 		preq->packfile = NULL;
 	}
@@ -2391,7 +2391,7 @@ abort:
 
 void process_http_object_request(struct http_object_request *freq)
 {
-	if (freq->slot == NULL)
+	if (!freq->slot)
 		return;
 	freq->curl_result = freq->slot->curl_result;
 	freq->http_code = freq->slot->http_code;
@@ -2448,7 +2448,7 @@ void release_http_object_request(struct
 		freq->localfile = -1;
 	}
 	FREE_AND_NULL(freq->url);
-	if (freq->slot != NULL) {
+	if (freq->slot) {
 		freq->slot->callback_func = NULL;
 		freq->slot->callback_data = NULL;
 		release_active_slot(freq->slot);
diff -u -p a/kwset.c b/kwset.c
--- a/kwset.c
+++ b/kwset.c
@@ -477,7 +477,7 @@ kwsprep (kwset_t kws)
 	next[i] = NULL;
       treenext(kwset->trie->links, next);
 
-      if ((trans = kwset->trans) != NULL)
+      if ((trans = kwset->trans))
 	for (i = 0; i < NCHAR; ++i)
 	  kwset->next[i] = next[U(trans[i])];
       else
@@ -485,7 +485,7 @@ kwsprep (kwset_t kws)
     }
 
   /* Fix things up for any translation table. */
-  if ((trans = kwset->trans) != NULL)
+  if ((trans = kwset->trans))
     for (i = 0; i < NCHAR; ++i)
       kwset->delta[i] = delta[U(trans[i])];
   else
diff -u -p a/ll-merge.c b/ll-merge.c
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -207,7 +207,7 @@ static enum ll_merge_result ll_ext_merge
 	dict[4].placeholder = "P"; dict[4].value = path_sq.buf;
 	dict[5].placeholder = NULL; dict[5].value = NULL;
 
-	if (fn->cmdline == NULL)
+	if (!fn->cmdline)
 		die("custom merge driver %s lacks command line.", fn->name);
 
 	result->ptr = NULL;
diff -u -p a/log-tree.c b/log-tree.c
--- a/log-tree.c
+++ b/log-tree.c
@@ -88,7 +88,7 @@ static int match_ref_pattern(const char
 			     const struct string_list_item *item)
 {
 	int matched = 0;
-	if (item->util == NULL) {
+	if (!item->util) {
 		if (!wildmatch(item->string, refname, 0))
 			matched = 1;
 	} else {
diff -u -p a/mailinfo.c b/mailinfo.c
--- a/mailinfo.c
+++ b/mailinfo.c
@@ -698,7 +698,7 @@ static int is_scissors_line(const char *
 			continue;
 		}
 		last_nonblank = c;
-		if (first_nonblank == NULL)
+		if (!first_nonblank)
 			first_nonblank = c;
 		if (*c == '-') {
 			in_perforation = 1;
@@ -1094,7 +1094,7 @@ static void handle_body(struct mailinfo
 			 */
 			lines = strbuf_split(line, '\n');
 			for (it = lines; (sb = *it); it++) {
-				if (*(it + 1) == NULL) /* The last line */
+				if (!*(it + 1)) /* The last line */
 					if (sb->buf[sb->len - 1] != '\n') {
 						/* Partial line, save it for later. */
 						strbuf_addbuf(&prev, sb);
diff -u -p a/mailmap.c b/mailmap.c
--- a/mailmap.c
+++ b/mailmap.c
@@ -77,7 +77,7 @@ static void add_mapping(struct string_li
 	struct mailmap_entry *me;
 	struct string_list_item *item;
 
-	if (old_email == NULL) {
+	if (!old_email) {
 		old_email = new_email;
 		new_email = NULL;
 	}
@@ -92,7 +92,7 @@ static void add_mapping(struct string_li
 		item->util = me;
 	}
 
-	if (old_name == NULL) {
+	if (!old_name) {
 		debug_mm("mailmap: adding (simple) entry for '%s'\n", old_email);
 
 		/* Replace current name and new email for simple entry */
@@ -123,9 +123,9 @@ static char *parse_name_and_email(char *
 	char *left, *right, *nstart, *nend;
 	*name = *email = NULL;
 
-	if ((left = strchr(buffer, '<')) == NULL)
+	if (!(left = strchr(buffer, '<')))
 		return NULL;
-	if ((right = strchr(left+1, '>')) == NULL)
+	if (!(right = strchr(left + 1, '>')))
 		return NULL;
 	if (!allow_empty_email && (left+1 == right))
 		return NULL;
@@ -153,7 +153,7 @@ static void read_mailmap_line(struct str
 	if (buffer[0] == '#')
 		return;
 
-	if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)) != NULL)
+	if ((name2 = parse_name_and_email(buffer, &name1, &email1, 0)))
 		parse_name_and_email(name2, &name2, &email2, 1);
 
 	if (email1)
@@ -320,7 +320,7 @@ int map_user(struct string_list *map,
 		 (int)*emaillen, debug_str(*email));
 
 	item = lookup_prefix(map, *email, *emaillen);
-	if (item != NULL) {
+	if (item) {
 		me = (struct mailmap_entry *)item->util;
 		if (me->namemap.nr) {
 			/*
@@ -334,7 +334,7 @@ int map_user(struct string_list *map,
 				item = subitem;
 		}
 	}
-	if (item != NULL) {
+	if (item) {
 		struct mailmap_info *mi = (struct mailmap_info *)item->util;
 		if (mi->name == NULL && mi->email == NULL) {
 			debug_mm("map_user:  -- (no simple mapping)\n");
diff -u -p a/merge-ort.c b/merge-ort.c
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -2068,7 +2068,7 @@ static char *handle_path_level_conflicts
 	 * to ensure that's the case.
 	 */
 	c_info = strmap_get(collisions, new_path);
-	if (c_info == NULL)
+	if (!c_info)
 		BUG("c_info is NULL");
 
 	/*
@@ -4640,7 +4640,7 @@ static void merge_ort_internal(struct me
 	}
 
 	merged_merge_bases = pop_commit(&merge_bases);
-	if (merged_merge_bases == NULL) {
+	if (!merged_merge_bases) {
 		/* if there is no common ancestor, use an empty tree */
 		struct tree *tree;
 
diff -u -p a/merge-recursive.c b/merge-recursive.c
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -82,7 +82,7 @@ static struct dir_rename_entry *dir_rena
 {
 	struct dir_rename_entry key;
 
-	if (dir == NULL)
+	if (!dir)
 		return NULL;
 	hashmap_entry_init(&key.ent, strhash(dir));
 	key.dir = dir;
@@ -1990,14 +1990,14 @@ static void get_renamed_dir_portion(cons
 	 * renamed means the root directory can never be renamed -- because
 	 * the root directory always exists).
 	 */
-	if (end_of_old == NULL)
+	if (!end_of_old)
 		return; /* Note: *old_dir and *new_dir are still NULL */
 
 	/*
 	 * If new_path contains no directory (end_of_new is NULL), then we
 	 * have a rename of old_path's directory to the root directory.
 	 */
-	if (end_of_new == NULL) {
+	if (!end_of_new) {
 		*old_dir = xstrndup(old_path, end_of_old - old_path);
 		*new_dir = xstrdup("");
 		return;
@@ -2116,7 +2116,7 @@ static char *handle_path_level_conflicts
 	 * to ensure that's the case.
 	 */
 	collision_ent = collision_find_entry(collisions, new_path);
-	if (collision_ent == NULL)
+	if (!collision_ent)
 		BUG("collision_ent is NULL");
 
 	/*
@@ -2996,7 +2996,7 @@ static void final_cleanup_rename(struct
 	const struct rename *re;
 	int i;
 
-	if (rename == NULL)
+	if (!rename)
 		return;
 
 	for (i = 0; i < rename->nr; i++) {
@@ -3605,7 +3605,7 @@ static int merge_recursive_internal(stru
 	}
 
 	merged_merge_bases = pop_commit(&merge_bases);
-	if (merged_merge_bases == NULL) {
+	if (!merged_merge_bases) {
 		/* if there is no common ancestor, use an empty tree */
 		struct tree *tree;
 
diff -u -p a/object-file.c b/object-file.c
--- a/object-file.c
+++ b/object-file.c
@@ -1728,7 +1728,7 @@ void *read_object_file_extended(struct r
 		die(_("loose object %s (stored in %s) is corrupt"),
 		    oid_to_hex(repl), path);
 
-	if ((p = has_packed_and_bad(r, repl)) != NULL)
+	if ((p = has_packed_and_bad(r, repl)))
 		die(_("packed object %s (stored in %s) is corrupt"),
 		    oid_to_hex(repl), p->pack_name);
 	obj_read_unlock();
diff -u -p a/pack-bitmap.c b/pack-bitmap.c
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -111,7 +111,7 @@ static struct ewah_bitmap *lookup_stored
 	struct ewah_bitmap *parent;
 	struct ewah_bitmap *composed;
 
-	if (st->xor == NULL)
+	if (!st->xor)
 		return st->root;
 
 	composed = ewah_pool_new();
@@ -279,7 +279,7 @@ static int load_bitmap_entries_v1(struct
 		if (xor_offset > 0) {
 			xor_bitmap = recent_bitmaps[(i - xor_offset) % MAX_XOR_OFFSET];
 
-			if (xor_bitmap == NULL)
+			if (!xor_bitmap)
 				return error("Invalid XOR offset in bitmap pack index");
 		}
 
@@ -728,7 +728,7 @@ static int add_commit_to_bitmap(struct b
 	if (!or_with)
 		return 0;
 
-	if (*base == NULL)
+	if (!*base)
 		*base = ewah_to_bitmap(or_with);
 	else
 		bitmap_or_ewah(*base, or_with);
@@ -771,7 +771,7 @@ static struct bitmap *find_objects(struc
 	 * Best case scenario: We found bitmaps for all the roots,
 	 * so the resulting `or` bitmap has the full reachability analysis
 	 */
-	if (not_mapped == NULL)
+	if (!not_mapped)
 		return base;
 
 	roots = not_mapped;
@@ -805,7 +805,7 @@ static struct bitmap *find_objects(struc
 		struct include_data incdata;
 		struct bitmap_show_data show_data;
 
-		if (base == NULL)
+		if (!base)
 			base = bitmap_new();
 
 		incdata.bitmap_git = bitmap_git;
@@ -1299,7 +1299,7 @@ struct bitmap_index *prepare_bitmap_walk
 		reset_revision_walk();
 		revs->ignore_missing_links = 0;
 
-		if (haves_bitmap == NULL)
+		if (!haves_bitmap)
 			BUG("failed to perform bitmap walk");
 	}
 
@@ -1698,7 +1698,7 @@ void test_bitmap_walk(struct rev_info *r
 		result = ewah_to_bitmap(bm);
 	}
 
-	if (result == NULL)
+	if (!result)
 		die("Commit %s doesn't have an indexed bitmap", oid_to_hex(&root->oid));
 
 	revs->tag_objects = 1;
diff -u -p a/packfile.c b/packfile.c
--- a/packfile.c
+++ b/packfile.c
@@ -116,7 +116,7 @@ int load_idx(const char *path, const uns
 
 	if (idx_size < 4 * 256 + hashsz + hashsz)
 		return error("index file %s is too small", path);
-	if (idx_map == NULL)
+	if (!idx_map)
 		return error("empty data");
 
 	if (hdr->idx_signature == htonl(PACK_IDX_SIGNATURE)) {
diff -u -p a/path.c b/path.c
--- a/path.c
+++ b/path.c
@@ -733,7 +733,7 @@ char *interpolate_path(const char *path,
 	struct strbuf user_path = STRBUF_INIT;
 	const char *to_copy = path;
 
-	if (path == NULL)
+	if (!path)
 		goto return_null;
 
 	if (skip_prefix(path, "%(prefix)/", &path))
diff -u -p a/prio-queue.c b/prio-queue.c
--- a/prio-queue.c
+++ b/prio-queue.c
@@ -19,7 +19,7 @@ void prio_queue_reverse(struct prio_queu
 {
 	int i, j;
 
-	if (queue->compare != NULL)
+	if (queue->compare)
 		BUG("prio_queue_reverse() on non-LIFO queue");
 	for (i = 0; i < (j = (queue->nr - 1) - i); i++)
 		swap(queue, i, j);
diff -u -p a/promisor-remote.c b/promisor-remote.c
--- a/promisor-remote.c
+++ b/promisor-remote.c
@@ -84,7 +84,7 @@ static void promisor_remote_move_to_tail
 					 struct promisor_remote *r,
 					 struct promisor_remote *previous)
 {
-	if (r->next == NULL)
+	if (!r->next)
 		return;
 
 	if (previous)
diff -u -p a/ref-filter.c b/ref-filter.c
--- a/ref-filter.c
+++ b/ref-filter.c
@@ -1261,7 +1261,7 @@ static void grab_date(const char *buf, s
 	 * ":" means no format is specified, and use the default.
 	 */
 	formatp = strchr(atomname, ':');
-	if (formatp != NULL) {
+	if (formatp) {
 		formatp++;
 		parse_date_format(formatp, &date_mode);
 	}
@@ -1509,7 +1509,7 @@ static void fill_missing_values(struct a
 	int i;
 	for (i = 0; i < used_atom_cnt; i++) {
 		struct atom_value *v = &val[i];
-		if (v->s == NULL)
+		if (!v->s)
 			v->s = xstrdup("");
 	}
 }
@@ -1619,7 +1619,7 @@ static const char *rstrip_ref_components
 
 	while (remaining-- > 0) {
 		char *p = strrchr(start, '/');
-		if (p == NULL) {
+		if (!p) {
 			free((char *)to_free);
 			return xstrdup("");
 		} else
diff -u -p a/refs/ref-cache.c b/refs/ref-cache.c
--- a/refs/ref-cache.c
+++ b/refs/ref-cache.c
@@ -134,7 +134,7 @@ int search_ref_dir(struct ref_dir *dir,
 	r = bsearch(&key, dir->entries, dir->nr, sizeof(*dir->entries),
 		    ref_entry_cmp_sslice);
 
-	if (r == NULL)
+	if (!r)
 		return -1;
 
 	return r - dir->entries;
diff -u -p a/reftable/stack_test.c b/reftable/stack_test.c
--- a/reftable/stack_test.c
+++ b/reftable/stack_test.c
@@ -35,7 +35,7 @@ static int count_dir_entries(const char
 	DIR *dir = opendir(dirname);
 	int len = 0;
 	struct dirent *d;
-	if (dir == NULL)
+	if (!dir)
 		return 0;
 
 	while ((d = readdir(dir))) {
diff -u -p a/reftable/tree.c b/reftable/tree.c
--- a/reftable/tree.c
+++ b/reftable/tree.c
@@ -16,7 +16,7 @@ struct tree_node *tree_search(void *key,
 			      int insert)
 {
 	int res;
-	if (*rootp == NULL) {
+	if (!*rootp) {
 		if (!insert) {
 			return NULL;
 		} else {
@@ -50,7 +50,7 @@ void infix_walk(struct tree_node *t, voi
 
 void tree_free(struct tree_node *t)
 {
-	if (t == NULL) {
+	if (!t) {
 		return;
 	}
 	if (t->left) {
diff -u -p a/reftable/writer.c b/reftable/writer.c
--- a/reftable/writer.c
+++ b/reftable/writer.c
@@ -183,7 +183,7 @@ static void writer_index_hash(struct ref
 	struct tree_node *node = tree_search(&want, &w->obj_index_tree,
 					     &obj_index_tree_node_compare, 0);
 	struct obj_index_tree_node *key = NULL;
-	if (node == NULL) {
+	if (!node) {
 		struct obj_index_tree_node empty = OBJ_INDEX_TREE_NODE_INIT;
 		key = reftable_malloc(sizeof(struct obj_index_tree_node));
 		*key = empty;
@@ -222,7 +222,7 @@ static int writer_add_record(struct reft
 
 	strbuf_reset(&w->last_key);
 	strbuf_addbuf(&w->last_key, &key);
-	if (w->block_writer == NULL) {
+	if (!w->block_writer) {
 		writer_reinit_block_writer(w, reftable_record_type(rec));
 	}
 
@@ -263,7 +263,7 @@ int reftable_writer_add_ref(struct refta
 	};
 	int err = 0;
 
-	if (ref->refname == NULL)
+	if (!ref->refname)
 		return REFTABLE_API_ERROR;
 	if (ref->update_index < w->min_update_index ||
 	    ref->update_index > w->max_update_index)
@@ -336,7 +336,7 @@ int reftable_writer_add_log(struct refta
 	if (log->value_type == REFTABLE_LOG_DELETION)
 		return reftable_writer_add_log_verbatim(w, log);
 
-	if (log->refname == NULL)
+	if (!log->refname)
 		return REFTABLE_API_ERROR;
 
 	input_log_message = log->value.update.message;
@@ -545,7 +545,7 @@ static int writer_finish_public_section(
 	uint8_t typ = 0;
 	int err = 0;
 
-	if (w->block_writer == NULL)
+	if (!w->block_writer)
 		return 0;
 
 	typ = block_writer_type(w->block_writer);
@@ -694,7 +694,7 @@ static int writer_flush_nonempty_block(s
 
 static int writer_flush_block(struct reftable_writer *w)
 {
-	if (w->block_writer == NULL)
+	if (!w->block_writer)
 		return 0;
 	if (w->block_writer->entries == 0)
 		return 0;
diff -u -p a/rerere.c b/rerere.c
--- a/rerere.c
+++ b/rerere.c
@@ -591,7 +591,7 @@ int rerere_remaining(struct repository *
 		else if (conflict_type == RESOLVED) {
 			struct string_list_item *it;
 			it = string_list_lookup(merge_rr, (const char *)e->name);
-			if (it != NULL) {
+			if (it) {
 				free_rerere_id(it);
 				it->util = RERERE_RESOLVED;
 			}
diff -u -p a/revision.c b/revision.c
--- a/revision.c
+++ b/revision.c
@@ -2833,7 +2833,7 @@ int setup_revisions(int argc, const char
 	}
 	strvec_clear(&prune_data);
 
-	if (revs->def == NULL)
+	if (!revs->def)
 		revs->def = opt ? opt->def : NULL;
 	if (opt && opt->tweak)
 		opt->tweak(revs, opt);
@@ -3652,7 +3652,7 @@ static enum rewrite_result rewrite_one_1
 			return rewrite_one_ok;
 		if (!p->parents)
 			return rewrite_one_noparents;
-		if ((p = one_relevant_parent(revs, p->parents)) == NULL)
+		if (!(p = one_relevant_parent(revs, p->parents)))
 			return rewrite_one_ok;
 		*pp = p;
 	}
diff -u -p a/setup.c b/setup.c
--- a/setup.c
+++ b/setup.c
@@ -1470,7 +1470,7 @@ int git_config_perm(const char *var, con
 	int i;
 	char *endptr;
 
-	if (value == NULL)
+	if (!value)
 		return PERM_GROUP;
 
 	if (!strcmp(value, "umask"))
diff -u -p a/sh-i18n--envsubst.c b/sh-i18n--envsubst.c
--- a/sh-i18n--envsubst.c
+++ b/sh-i18n--envsubst.c
@@ -397,7 +397,7 @@ subst_from_stdin (void)
 		  /* Substitute the variable's value from the environment.  */
 		  const char *env_value = getenv (buffer);
 
-		  if (env_value != NULL)
+		  if (env_value)
 		    fputs (env_value, stdout);
 		}
 	      else
diff -u -p a/shallow.c b/shallow.c
--- a/shallow.c
+++ b/shallow.c
@@ -560,7 +560,7 @@ static void paint_down(struct paint_info
 		else
 			c->object.flags |= SEEN;
 
-		if (*refs == NULL)
+		if (!*refs)
 			*refs = bitmap;
 		else {
 			memcpy(tmp, *refs, bitmap_size);
diff -u -p a/trailer.c b/trailer.c
--- a/trailer.c
+++ b/trailer.c
@@ -1029,7 +1029,7 @@ static FILE *create_in_place_tempfile(co
 
 	/* Create temporary file in the same directory as the original */
 	tail = strrchr(file, '/');
-	if (tail != NULL)
+	if (tail)
 		strbuf_add(&filename_template, file, tail - file + 1);
 	strbuf_addstr(&filename_template, "git-interpret-trailers-XXXXXX");
 
diff -u -p a/transport.c b/transport.c
--- a/transport.c
+++ b/transport.c
@@ -438,7 +438,7 @@ static int fetch_refs_via_pack(struct tr
 		args.self_contained_and_connected;
 	data->options.connectivity_checked = args.connectivity_checked;
 
-	if (refs == NULL)
+	if (!refs)
 		ret = -1;
 	if (report_unmatched_refs(to_fetch, nr_heads))
 		ret = -1;
diff -u -p a/wildmatch.c b/wildmatch.c
--- a/wildmatch.c
+++ b/wildmatch.c
@@ -113,7 +113,7 @@ static int dowild(const uchar *p, const
 				/* Trailing "**" matches everything.  Trailing "*" matches
 				 * only if there are no more slash characters. */
 				if (!match_slash) {
-					if (strchr((char*)text, '/') != NULL)
+					if (strchr((char *)text, '/'))
 						return WM_NOMATCH;
 				}
 				return WM_MATCH;
diff -u -p a/worktree.c b/worktree.c
--- a/worktree.c
+++ b/worktree.c
@@ -483,7 +483,7 @@ int submodule_uses_worktrees(const char
 		return 0;
 
 	d = readdir_skip_dot_and_dotdot(dir);
-	if (d != NULL)
+	if (d)
 		ret = 1;
 	closedir(dir);
 	return ret;
diff -u -p a/wrapper.c b/wrapper.c
--- a/wrapper.c
+++ b/wrapper.c
@@ -393,7 +393,7 @@ FILE *xfopen(const char *path, const cha
 FILE *xfdopen(int fd, const char *mode)
 {
 	FILE *stream = fdopen(fd, mode);
-	if (stream == NULL)
+	if (!stream)
 		die_errno("Out of memory? fdopen failed");
 	return stream;
 }
diff -u -p a/xdiff-interface.c b/xdiff-interface.c
--- a/xdiff-interface.c
+++ b/xdiff-interface.c
@@ -159,7 +159,7 @@ int read_mmfile(mmfile_t *ptr, const cha
 
 	if (stat(filename, &st))
 		return error_errno("Could not stat %s", filename);
-	if ((f = fopen(filename, "rb")) == NULL)
+	if (!(f = fopen(filename, "rb")))
 		return error_errno("Could not open %s", filename);
 	sz = xsize_t(st.st_size);
 	ptr->ptr = xmalloc(sz ? sz : 1);
diff -u -p a/xdiff/xemit.c b/xdiff/xemit.c
--- a/xdiff/xemit.c
+++ b/xdiff/xemit.c
@@ -65,7 +65,7 @@ xdchange_t *xdl_get_hunk(xdchange_t **xs
 			*xscr = xch;
 	}
 
-	if (*xscr == NULL)
+	if (!*xscr)
 		return NULL;
 
 	lxch = *xscr;
diff -u -p a/xdiff/xprepare.c b/xdiff/xprepare.c
--- a/xdiff/xprepare.c
+++ b/xdiff/xprepare.c
@@ -188,7 +188,7 @@ static int xdl_prepare_ctx(unsigned int
 	memset(rhash, 0, hsize * sizeof(xrecord_t *));
 
 	nrec = 0;
-	if ((cur = blk = xdl_mmfile_first(mf, &bsize)) != NULL) {
+	if ((cur = blk = xdl_mmfile_first(mf, &bsize))) {
 		for (top = blk + bsize; cur < top; ) {
 			prev = cur;
 			hav = xdl_hash_record(&cur, top, xpp->flags);
diff -u -p a/xdiff/xutils.c b/xdiff/xutils.c
--- a/xdiff/xutils.c
+++ b/xdiff/xutils.c
@@ -122,7 +122,7 @@ long xdl_guess_lines(mmfile_t *mf, long
 	long nl = 0, size, tsize = 0;
 	char const *data, *cur, *top;
 
-	if ((cur = data = xdl_mmfile_first(mf, &size)) != NULL) {
+	if ((cur = data = xdl_mmfile_first(mf, &size))) {
 		for (top = data + size; nl < sample && cur < top; ) {
 			nl++;
 			if (!(cur = memchr(cur, '\n', top - cur)))