From: Karel Zak Date: Tue, 18 Dec 2012 13:49:21 +0000 (+0100) Subject: include/list: add list_last_entry() X-Git-Tag: v2.23-rc1~421 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59da1544ce82813e88c24ed8b612ba39ea1e3cc2;p=thirdparty%2Futil-linux.git include/list: add list_last_entry() Signed-off-by: Karel Zak --- diff --git a/include/list.h b/include/list.h index 414d356ba1..e9ed0c4cd3 100644 --- a/include/list.h +++ b/include/list.h @@ -127,11 +127,11 @@ _INLINE_ int list_empty(struct list_head *head) } /** - * list_last_entry - tests whether is entry last in the list + * list_entry_is_last - tests whether is entry last in the list * @entry: the entry to test. * @head: the list to test. */ -_INLINE_ int list_last_entry(struct list_head *entry, struct list_head *head) +_INLINE_ int list_entry_is_last(struct list_head *entry, struct list_head *head) { return head->prev == entry; } @@ -171,6 +171,9 @@ _INLINE_ void list_splice(struct list_head *list, struct list_head *head) #define list_first_entry(head, type, member) \ ((head) && (head)->next != (head) ? list_entry((head)->next, type, member) : NULL) +#define list_last_entry(head, type, member) \ + ((head) && (head)->prev != (head) ? list_entry((head)->prev, type, member) : NULL) + /** * list_for_each - iterate over elements in a list * @pos: the &struct list_head to use as a loop counter. diff --git a/lib/tt.c b/lib/tt.c index 54a452417d..310c47e9fa 100644 --- a/lib/tt.c +++ b/lib/tt.c @@ -50,7 +50,7 @@ static const struct tt_symbols utf8_tt_symbols = { #endif /* !HAVE_WIDECHAR */ #define is_last_column(_tb, _cl) \ - list_last_entry(&(_cl)->cl_columns, &(_tb)->tb_columns) + list_entry_is_last(&(_cl)->cl_columns, &(_tb)->tb_columns) /* * Counts number of cells in multibyte string. For all control and @@ -401,7 +401,7 @@ static char *line_get_ascii_art(struct tt_line *ln, char *buf, size_t *bufsz) if (!buf) return NULL; - if (list_last_entry(&ln->ln_children, &ln->parent->ln_branch)) + if (list_entry_is_last(&ln->ln_children, &ln->parent->ln_branch)) art = " "; else art = ln->table->symbols->vert; @@ -445,7 +445,7 @@ static char *line_get_data(struct tt_line *ln, struct tt_column *cl, if (!ln->parent) snprintf(p, bufsz, "%s", data); /* root node */ - else if (list_last_entry(&ln->ln_children, &ln->parent->ln_branch)) + else if (list_entry_is_last(&ln->ln_children, &ln->parent->ln_branch)) snprintf(p, bufsz, "%s%s", sym->right, data); /* last chaild */ else snprintf(p, bufsz, "%s%s", sym->branch, data); /* any child */