Re: [PATCH 0/2] introduce list_for_each_entry_del

From: JÃrn Engel
Date: Mon Jun 03 2013 - 17:05:56 EST


On Mon, 3 June 2013 13:49:30 -0700, Christoph Hellwig wrote:
>
> I can't say I like the structure.
>
> A list_pop that removes and entry from the head or returns NULL if the
> list is empty would lead to nice while loops that are obviously
> readable instead.

Something like this?

#define list_pop(head) \
({ struct list_head *____pos; \
list_empty(head) ? NULL : (____pos = (head)->next, \
list_del(____pos), ____pos) \
})

#define list_pop_entry(head, type, member) \
({ struct list_head *____pos; \
list_empty(head) ? NULL : (____pos = (head)->next, \
list_del(____pos), list_entry(____pos, type, member) \
})

Would be fine with me as well.

JÃrn

--
Beware of bugs in the above code; I have only proved it correct, but
not tried it.
-- Donald Knuth
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/