Skip to content

Commit

Permalink
Do not use the non-standard typeof operator
Browse files Browse the repository at this point in the history
  • Loading branch information
pooler committed May 16, 2014
1 parent f76c4d6 commit ab6d34e
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 11 deletions.
23 changes: 13 additions & 10 deletions elist.h
Expand Up @@ -215,37 +215,40 @@ static inline void list_splice_init(struct list_head *list,
* @pos: the type * to use as a loop counter.
* @head: the head for your list.
* @member: the name of the list_struct within the struct.
* @type: the type of the struct.
*/
#define list_for_each_entry(pos, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member); \
#define list_for_each_entry(pos, head, member, type) \
for (pos = list_entry((head)->next, type, member); \
&pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member))
pos = list_entry(pos->member.next, type, member))

/**
* list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
* @pos: the type * to use as a loop counter.
* @n: another type * to use as temporary storage
* @head: the head for your list.
* @member: the name of the list_struct within the struct.
* @type: the type of the struct.
*/
#define list_for_each_entry_safe(pos, n, head, member) \
for (pos = list_entry((head)->next, typeof(*pos), member), \
n = list_entry(pos->member.next, typeof(*pos), member); \
#define list_for_each_entry_safe(pos, n, head, member, type) \
for (pos = list_entry((head)->next, type, member), \
n = list_entry(pos->member.next, type, member); \
&pos->member != (head); \
pos = n, n = list_entry(n->member.next, typeof(*n), member))
pos = n, n = list_entry(n->member.next, type, member))

/**
* list_for_each_entry_continue - iterate over list of given type
* continuing after existing point
* @pos: the type * to use as a loop counter.
* @head: the head for your list.
* @member: the name of the list_struct within the struct.
* @type: the type of the struct.
*/
#define list_for_each_entry_continue(pos, head, member) \
for (pos = list_entry(pos->member.next, typeof(*pos), member), \
#define list_for_each_entry_continue(pos, head, member, type) \
for (pos = list_entry(pos->member.next, type, member), \
prefetch(pos->member.next); \
&pos->member != (head); \
pos = list_entry(pos->member.next, typeof(*pos), member), \
pos = list_entry(pos->member.next, type, member), \
prefetch(pos->member.next))

#endif
2 changes: 1 addition & 1 deletion util.c
Expand Up @@ -1417,7 +1417,7 @@ void tq_free(struct thread_q *tq)
if (!tq)
return;

list_for_each_entry_safe(ent, iter, &tq->q, q_node) {
list_for_each_entry_safe(ent, iter, &tq->q, q_node, struct tq_ent) {
list_del(&ent->q_node);
free(ent);
}
Expand Down

0 comments on commit ab6d34e

Please sign in to comment.