[OpenWrt-Devel] [PATCH] firewall3: utils: create a common helper to find strings is files.

Rui Salvaterra rsalvaterra at gmail.com
Wed Jan 29 06:50:33 EST 2020


Both fw3_has_table and fw3_has_target do the same thing. Factor out the
common code into a separate function.

Signed-off-by: Rui Salvaterra <rsalvaterra at gmail.com>
---
 utils.c | 42 ++++++++++++++----------------------------
 1 file changed, 14 insertions(+), 28 deletions(-)

diff --git a/utils.c b/utils.c
index da65632..228d63f 100644
--- a/utils.c
+++ b/utils.c
@@ -316,23 +316,19 @@ fw3_command_close(void)
 	pipe_pid = -1;
 }
 
-bool
-fw3_has_table(bool ipv6, const char *table)
+static bool
+file_contains(const char *path, const char* str)
 {
 	FILE *f;
-
 	char line[12];
 	bool seen = false;
 
-	const char *path = ipv6
-		? "/proc/net/ip6_tables_names" : "/proc/net/ip_tables_names";
-
-	if (!(f = fopen(path, "r")))
+	if(!(f = fopen(path, "r")))
 		return false;
 
-	while (fgets(line, sizeof(line), f))
+	while(fgets(line, sizeof(line), f))
 	{
-		if (!strncmp(line, table, strlen(table)))
+		if (!strcmp(line, str))
 		{
 			seen = true;
 			break;
@@ -345,31 +341,21 @@ fw3_has_table(bool ipv6, const char *table)
 }
 
 bool
-fw3_has_target(const bool ipv6, const char *target)
+fw3_has_table(const bool ipv6, const char *table)
 {
-	FILE *f;
+	const char *path = ipv6
+		? "/proc/net/ip6_tables_names" : "/proc/net/ip_tables_names";
 
-	char line[12];
-	bool seen = false;
+	return file_contains(path, table);
+}
 
+bool
+fw3_has_target(const bool ipv6, const char *target)
+{
 	const char *path = ipv6
 		? "/proc/net/ip6_tables_targets" : "/proc/net/ip_tables_targets";
 
-	if (!(f = fopen(path, "r")))
-		return false;
-
-	while (fgets(line, sizeof(line), f))
-	{
-		if (!strcmp(line, target))
-		{
-			seen = true;
-			break;
-		}
-	}
-
-	fclose(f);
-
-	return seen;
+	return file_contains(path, target);
 }
 
 bool
-- 
2.25.0


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list