firewall3: create a common helper to find strings in files
authorRui Salvaterra <rsalvaterra@gmail.com>
Mon, 19 Oct 2020 15:51:16 +0000 (16:51 +0100)
committerRui Salvaterra <rsalvaterra@gmail.com>
Tue, 23 Mar 2021 09:18:33 +0000 (09:18 +0000)
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@gmail.com>
utils.c
utils.h

diff --git a/utils.c b/utils.c
index 5667bcfd76db5d91191a90e0e705b51d2978745f..17d5bf97d18f43a54cb721604ee60f9bb34590ff 100644 (file)
--- a/utils.c
+++ b/utils.c
@@ -315,23 +315,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")))
                return false;
 
        while (fgets(line, sizeof(line), f))
        {
-               if (!strncmp(line, table, strlen(table)))
+               if (!strncmp(line, str, strlen(str)))
                {
                        seen = true;
                        break;
@@ -344,31 +340,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
diff --git a/utils.h b/utils.h
index 254bea45d48b207ba46a3c427d47d327814195ee..884907da51b22c35a8bb4c7ed893cff2d5801342 100644 (file)
--- a/utils.h
+++ b/utils.h
@@ -55,7 +55,6 @@ void error(const char *format, ...)
 void info(const char *format, ...)
        __attribute__ ((format (printf, 1, 2)));
 
-
 #define warn_section(t, r, e, fmt, ...)                                        \
        do {                                                                    \
                if (e)                                                          \
@@ -103,7 +102,7 @@ void fw3_command_close(void);
 void fw3_pr(const char *fmt, ...)
        __attribute__ ((format (printf, 1, 2)));
 
-bool fw3_has_table(bool ipv6, const char *table);
+bool fw3_has_table(const bool ipv6, const char *table);
 
 bool fw3_has_target(const bool ipv6, const char *target);