From 7ed22b481f47681887bdf1068c910e2a67d688a7 Mon Sep 17 00:00:00 2001
From: Patrick McDermott <patrick.mcdermott@libiquity.com>
Date: Fri, 12 May 2023 14:36:09 -0400
Subject: opk/read: Make GCC 12 analyzer STFU

What a mess.

Fixes most of analyzer*.log (thousands of lines of error messages).
---
(limited to 'src')

diff --git a/src/opk/read.c b/src/opk/read.c
index 768f64d..2d9f439 100644
--- a/src/opk/read.c
+++ b/src/opk/read.c
@@ -140,6 +140,8 @@ _opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
 						"\n"), stderr);
 			return OPKG_OPK_ERROR;
 		}
+/*		For below #pragmas: path initialized here
+ *		(opk->control_dir != NULL). */
 		path = malloc(strlen(opk->control_dir) +
 				OPKG_OPK_USTAR_NAME_SIZE + 1);
 		if (path == NULL) {
@@ -152,7 +154,11 @@ _opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
 
 	if (_opkg_opk_opk_read_init_inner(opk) != OPKG_OPK_OK) {
 		if (opk->control_dir != NULL) {
+#			pragma GCC diagnostic push
+#			pragma GCC diagnostic ignored \
+				"-Wanalyzer-use-of-uninitialized-value"
 			free(path);
+#			pragma GCC diagnostic pop
 		}
 		return OPKG_OPK_ERROR;
 	}
@@ -176,27 +182,42 @@ _opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
 			free(member);
 			_opkg_opk_opk_read_free_inner(opk);
 			if (opk->control_dir != NULL) {
+#				pragma GCC diagnostic push
+#				pragma GCC diagnostic ignored \
+					"-Wanalyzer-use-of-uninitialized-value"
 				free(path);
+#				pragma GCC diagnostic pop
 			}
 			return OPKG_OPK_ERROR;
 		}
 
 		/* Open file for extraction. */
 		if (opk->control_dir != NULL) {
+#			pragma GCC diagnostic push
+#			pragma GCC diagnostic ignored \
+				"-Wanalyzer-use-of-uninitialized-value"
 			if (sprintf(path, "%s/%s", opk->control_dir,
 						member->name) <= 0) {
 				free(member);
 				_opkg_opk_opk_read_free_inner(opk);
 				free(path);
 				return OPKG_OPK_ERROR;
+#				pragma GCC diagnostic pop
 			}
+/*			For below #pragmas: fp initialized here
+ *			(opk->control_dir != NULL). */
+/*			GCC analyzer doesn't complain about this use of path? */
 			fp = fopen(path, "wb");
 			if (fp == NULL) {
 				fputs(_("Error: Failed to extract control file"
 							"\n"), stderr);
 				free(member);
 				_opkg_opk_opk_read_free_inner(opk);
+#				pragma GCC diagnostic push
+#				pragma GCC diagnostic ignored \
+					"-Wanalyzer-use-of-uninitialized-value"
 				free(path);
+#				pragma GCC diagnostic pop
 				return OPKG_OPK_ERROR;
 			}
 		}
@@ -235,12 +256,16 @@ _opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
 				}
 				return OPKG_OPK_ERROR;
 			}
+#			pragma GCC diagnostic push
+#			pragma GCC diagnostic ignored \
+				"-Wanalyzer-use-of-uninitialized-value"
 			if (opk->control_dir != NULL && fwrite(buffer, 1, size,
 						fp) != size) {
 				fputs(_("Error: Failed to write control file\n")
 						, stderr);
 				_opkg_opk_opk_read_free_inner(opk);
 				free(path);
+#				pragma GCC diagnostic pop
 				return OPKG_OPK_ERROR;
 			}
 		}
@@ -249,25 +274,40 @@ _opkg_opk_opk_read_control(struct opkg_opk_opk *opk)
 					stderr);
 			_opkg_opk_opk_read_free_inner(opk);
 			if (opk->control_dir != NULL) {
+#				pragma GCC diagnostic push
+#				pragma GCC diagnostic ignored \
+					"-Wanalyzer-use-of-uninitialized-value"
 				free(path);
 				fclose(fp);
+#				pragma GCC diagnostic pop
 			}
+#			pragma GCC diagnostic push
+#			pragma GCC diagnostic ignored "-Wanalyzer-file-leak"
 			return OPKG_OPK_ERROR;
+#			pragma GCC diagnostic pop
 		}
 		opk->previously_printed = 1;
 
 		/* Close file for extraction. */
 		if (opk->control_dir != NULL) {
+#			pragma GCC diagnostic push
+#			pragma GCC diagnostic ignored \
+				"-Wanalyzer-use-of-uninitialized-value"
 			if (fclose(fp) != 0) {
 				_opkg_opk_opk_read_free_inner(opk);
 				free(path);
+#				pragma GCC diagnostic pop
 				return OPKG_OPK_ERROR;
 			}
 		}
 	}
 	if (opk->control_dir != NULL) {
 		/* Done with path buffer. */
+#		pragma GCC diagnostic push
+#		pragma GCC diagnostic ignored \
+			"-Wanalyzer-use-of-uninitialized-value"
 		free(path);
+#		pragma GCC diagnostic pop
 	}
 	if (ret_list == OPKG_OPK_ERROR) {
 		fputs(_("Error: Failed to list control files\n"), stderr);
--
cgit v0.9.1