]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libsmartcols: (filter) make holders API more generic
authorKarel Zak <kzak@redhat.com>
Tue, 5 Sep 2023 09:52:39 +0000 (11:52 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 20 Nov 2023 21:25:46 +0000 (22:25 +0100)
The internal implementation is generic (can hold something else than
only column name). Let's make the API also generic. Maybe later we can
support something else than only column names in expressions
(e.g. env.variables ?).

Signed-off-by: Karel Zak <kzak@redhat.com>
libsmartcols/samples/filter.c
libsmartcols/src/filter.c
libsmartcols/src/libsmartcols.h.in
libsmartcols/src/libsmartcols.sym

index fe8121c8e1fc4f0768e2c8541b57d052e6bec3ed..ec61b7f00ef561efb44bb3fd53cb091481032023 100644 (file)
@@ -141,7 +141,7 @@ int main(int argc, char *argv[])
                if (!itr)
                        err(EXIT_FAILURE, "failed to allocate iterator");
 
-               while (scols_filter_next_name(fltr, itr, &name) == 0) {
+               while (scols_filter_next_holder(fltr, itr, &name, 0) == 0) {
                        struct libscols_column *col =
                                        scols_table_get_column_by_name(tb, name);
                        if (!col) {
index 2cef954ed4aa64639b5f914fe951ee1d9adcb7bc..e99e79fc6927665b92ea397700a53bf8efc7b4d8 100644 (file)
@@ -153,18 +153,23 @@ const char *scols_filter_get_errmsg(struct libscols_filter *fltr)
        return fltr ? fltr->errmsg : NULL;
 }
 
-int scols_filter_next_name(struct libscols_filter *fltr,
-                       struct libscols_iter *itr, const char **name)
+int scols_filter_next_holder(struct libscols_filter *fltr,
+                       struct libscols_iter *itr,
+                       const char **name,
+                       int type)
 {
        struct filter_param *prm = NULL;
        int rc = 0;
 
        *name = NULL;
+       if (!type)
+               type = F_HOLDER_COLUMN; /* default */
 
        do {
                rc = filter_next_param(fltr, itr, &prm);
-               if (rc == 0 && prm->holder == F_HOLDER_COLUMN)
+               if (rc == 0 && (int) prm->holder == type) {
                        *name = prm->val.str;
+               }
        } while (rc == 0 && !*name);
 
        return rc;
index ae1f58145082243ca28e24beb1361dd5e855a9cc..200d7f5d3dbe24bd88bddeb87ec4df528870fcef 100644 (file)
@@ -377,8 +377,8 @@ extern const char *scols_filter_get_errmsg(struct libscols_filter *fltr);
 extern int scols_line_apply_filter(struct libscols_line *ln,
                        struct libscols_filter *fltr, int *status);
 
-extern int scols_filter_next_name(struct libscols_filter *fltr,
-                        struct libscols_iter *itr, const char **name);
+extern int scols_filter_next_holder(struct libscols_filter *fltr,
+                        struct libscols_iter *itr, const char **name, int type);
 extern int scols_filter_assign_column(struct libscols_filter *fltr,
                         const char *name, struct libscols_column *col);
 
index 5e0c56069663c57ae21711b291b8c1f9361498dd..2b170906937c4c72b0003d01e79bdbe02ec49a95 100644 (file)
@@ -226,7 +226,7 @@ SMARTCOLS_2.40 {
        scols_new_filter;
        scols_unref_filter;
        scols_filter_get_errmsg;
-       scols_filter_next_name;
+       scols_filter_next_holder;
        scols_filter_assign_column;
        scols_line_apply_filter;
 } SMARTCOLS_2.39;