]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libsmartcols: allow to read lines as tree
authorKarel Zak <kzak@redhat.com>
Wed, 19 Mar 2014 17:01:16 +0000 (18:01 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 3 Apr 2014 10:29:17 +0000 (12:29 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
libsmartcols/src/libsmartcols.h.in
libsmartcols/src/line.c

index 8a61668bf705bcb82f0e37f3c978807dfa1b9317..cbc5f0a68254df7379ce3e1c8bbf11b1252679e7 100644 (file)
@@ -101,6 +101,9 @@ extern int scols_line_set_userdata(struct libscols_line *ln, void *data);
 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_next_child(struct libscols_line *ln,
+                         struct libscols_iter *itr, struct libscols_line **chld);
 extern struct libscols_line *scols_line_get_parent(struct libscols_line *ln);
 extern int scols_line_set_color(struct libscols_line *ln, const char *color);
 extern const char *scols_line_get_color(struct libscols_line *ln);
index 80a1beabbed9bcebbfb9321c15b4e1fd95b6a102..10d3b818ee7726545f1dceb164e218b169e3cf8c 100644 (file)
@@ -158,6 +158,32 @@ struct libscols_line *scols_line_get_parent(struct libscols_line *ln)
        return ln ? ln->parent : NULL;
 }
 
+int scols_line_has_children(struct libscols_line *ln)
+{
+       assert(ln);
+       return ln ? !list_empty(&ln->ln_branch) : 0;
+}
+
+int scols_line_next_child(struct libscols_line *ln,
+                         struct libscols_iter *itr,
+                         struct libscols_line **chld)
+{
+       int rc = 1;
+
+       if (!ln || !itr || !chld)
+               return -EINVAL;
+       *chld = NULL;
+
+       if (!itr->head)
+               SCOLS_ITER_INIT(itr, &ln->ln_branch);
+       if (itr->p != itr->head) {
+               SCOLS_ITER_ITERATE(itr, *chld, struct libscols_line, ln_children);
+               rc = 0;
+       }
+
+       return rc;
+}
+
 /*
  * The default line color, used when cell color unspecified.
  */