]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsfd: add a helper function for building filter
authorMasatake YAMATO <yamato@redhat.com>
Fri, 29 Oct 2021 21:53:30 +0000 (06:53 +0900)
committerMasatake YAMATO <yamato@redhat.com>
Thu, 18 Nov 2021 14:52:46 +0000 (23:52 +0900)
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
misc-utils/lsfd.c

index 111abd6027a8bdf5ff53e7f644c9070397eb1859..874b4919b7982f5f526ad0c1750c62c636b5c7d5 100644 (file)
@@ -1097,6 +1097,26 @@ static void append_filter_expr(char **a, const char *b, bool and)
        xstrappend(a, ")");
 }
 
+static struct lsfd_filter *new_filter(const char *expr, bool debug, const char *err_prefix, struct lsfd_control *ctl)
+{
+       struct lsfd_filter *filter;
+       const char *errmsg;
+
+       filter = lsfd_filter_new(expr, ctl->tb,
+                                LSFD_N_COLS,
+                                column_name_to_id_cb,
+                                add_column_by_id_cb, ctl);
+       errmsg = lsfd_filter_get_errmsg(filter);
+       if (errmsg)
+               errx(EXIT_FAILURE, "%s%s", err_prefix, errmsg);
+       if (debug) {
+               lsfd_filter_dump(filter, stdout);
+               exit(EXIT_SUCCESS);
+       }
+
+       return filter;
+}
+
 int main(int argc, char *argv[])
 {
        int c;
@@ -1215,17 +1235,7 @@ int main(int argc, char *argv[])
 
        /* make fitler */
        if (filter_expr) {
-               ctl.filter = lsfd_filter_new(filter_expr, ctl.tb,
-                                            LSFD_N_COLS,
-                                            column_name_to_id_cb,
-                                            add_column_by_id_cb, &ctl);
-               const char *errmsg = lsfd_filter_get_errmsg(ctl.filter);
-               if (errmsg)
-                       errx(EXIT_FAILURE, "%s", errmsg);
-               if (debug_filter) {
-                       lsfd_filter_dump(ctl.filter, stdout);
-                       return 0;
-               }
+               ctl.filter = new_filter(filter_expr, debug_filter, "", &ctl);
                free(filter_expr);
        }