summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2012-12-18 14:49:21 +0100
committerKarel Zak2012-12-18 15:00:03 +0100
commit59da1544ce82813e88c24ed8b612ba39ea1e3cc2 (patch)
tree242757c82633f737a21f64d403557dab32af9bef
parentfdisk: remove crappy bugs section from man page (diff)
downloadkernel-qcow2-util-linux-59da1544ce82813e88c24ed8b612ba39ea1e3cc2.tar.gz
kernel-qcow2-util-linux-59da1544ce82813e88c24ed8b612ba39ea1e3cc2.tar.xz
kernel-qcow2-util-linux-59da1544ce82813e88c24ed8b612ba39ea1e3cc2.zip
include/list: add list_last_entry()
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--include/list.h7
-rw-r--r--lib/tt.c6
2 files changed, 8 insertions, 5 deletions
diff --git a/include/list.h b/include/list.h
index 414d356ba..e9ed0c4cd 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 54a452417..310c47e9f 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 */