From: Karel Zak Date: Wed, 19 Mar 2014 17:01:16 +0000 (+0100) Subject: libsmartcols: allow to read lines as tree X-Git-Tag: v2.25-rc1~374 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7e8fe029417a6cc8d391100af6e94086d0a56a36;p=thirdparty%2Futil-linux.git libsmartcols: allow to read lines as tree Signed-off-by: Karel Zak --- diff --git a/libsmartcols/src/libsmartcols.h.in b/libsmartcols/src/libsmartcols.h.in index 8a61668bf7..cbc5f0a682 100644 --- a/libsmartcols/src/libsmartcols.h.in +++ b/libsmartcols/src/libsmartcols.h.in @@ -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); diff --git a/libsmartcols/src/line.c b/libsmartcols/src/line.c index 80a1beabbe..10d3b818ee 100644 --- a/libsmartcols/src/line.c +++ b/libsmartcols/src/line.c @@ -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. */