]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libsmartcols: add scols_line_is_ancestor()
authorKarel Zak <kzak@redhat.com>
Fri, 5 May 2017 10:12:43 +0000 (12:12 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 5 May 2017 10:12:43 +0000 (12:12 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libsmartcols/docs/libsmartcols-sections.txt
libsmartcols/src/libsmartcols.h.in
libsmartcols/src/libsmartcols.sym
libsmartcols/src/line.c

index a55716db9d2427ef6198944881eda5345a2fae34..13a35646b656dddd4d9012f452bd98db98b45334 100644 (file)
@@ -71,6 +71,7 @@ scols_line_get_ncells
 scols_line_get_parent
 scols_line_get_userdata
 scols_line_has_children
+scols_line_is_ancestor
 scols_line_next_child
 scols_line_refer_column_data
 scols_line_refer_data
index 1ff465e44c91a202067647dcfc912726741c5ab9..e77af857a2ba37abdcc9c09ba6b1de357c91ec10 100644 (file)
@@ -193,6 +193,7 @@ extern void *scols_line_get_userdata(struct libscols_line *ln);
 extern int scols_line_remove_child(struct libscols_line *ln, struct libscols_line *child);
 extern int scols_line_add_child(struct libscols_line *ln, struct libscols_line *child);
 extern int scols_line_has_children(struct libscols_line *ln);
+extern int scols_line_is_ancestor(struct libscols_line *ln, struct libscols_line *parent);
 extern int scols_line_next_child(struct libscols_line *ln,
                          struct libscols_iter *itr, struct libscols_line **chld);
 extern struct libscols_line *scols_line_get_parent(const struct libscols_line *ln);
index 95fcc31670eb68f25a6132b72cdc9635bf968184..174122e49224f5d3f158135e072794ca79e265e9 100644 (file)
@@ -164,4 +164,5 @@ global:
        scols_cell_get_alignment;
        scols_table_move_column;
        scols_sort_table_by_tree;
+       scols_line_is_ancestor;
 } SMARTCOLS_2.29;
index 1c3141a16b27b4dbff3f6e0ca6f446853c91544a..134bf2d8e8cbdc444c7b6f71494f882fb8402fb4 100644 (file)
@@ -307,6 +307,25 @@ int scols_line_next_child(struct libscols_line *ln,
        return rc;
 }
 
+
+/**
+ * scols_line_is_ancestor:
+ * @ln: line
+ * @parent: potential parent
+ *
+ * The function is designed to detect circular dependencies between @ln and
+ * @parent. It checks if @ln is not any (grand) parent in the @parent's tree.
+ */
+int scols_line_is_ancestor(struct libscols_line *ln, struct libscols_line *parent)
+{
+       while (parent) {
+               if (parent == ln)
+                       return 1;
+               parent = scols_line_get_parent(parent);
+       };
+       return 0;
+}
+
 /**
  * scols_line_set_color:
  * @ln: a pointer to a struct libscols_line instance