@@ -30,14 +30,14 @@ struct list_head {
30
30
* This is only for internal list manipulation where we know
31
31
* the prev/next entries already!
32
32
*/
33
- static inline void __list_add (struct list_head * new ,
33
+ static inline void __list_add (struct list_head * newhead ,
34
34
struct list_head * prev ,
35
35
struct list_head * next )
36
36
{
37
- next -> prev = new ;
38
- new -> next = next ;
39
- new -> prev = prev ;
40
- prev -> next = new ;
37
+ next -> prev = newhead ;
38
+ newhead -> next = next ;
39
+ newhead -> prev = prev ;
40
+ prev -> next = newhead ;
41
41
}
42
42
43
43
/**
@@ -48,9 +48,9 @@ static inline void __list_add(struct list_head *new,
48
48
* Insert a new entry after the specified head.
49
49
* This is good for implementing stacks.
50
50
*/
51
- static inline void list_add (struct list_head * new , struct list_head * head )
51
+ static inline void list_add (struct list_head * newhead , struct list_head * head )
52
52
{
53
- __list_add (new , head , head -> next );
53
+ __list_add (newhead , head , head -> next );
54
54
}
55
55
56
56
/**
@@ -61,9 +61,9 @@ static inline void list_add(struct list_head *new, struct list_head *head)
61
61
* Insert a new entry before the specified head.
62
62
* This is useful for implementing queues.
63
63
*/
64
- static inline void list_add_tail (struct list_head * new , struct list_head * head )
64
+ static inline void list_add_tail (struct list_head * newhead , struct list_head * head )
65
65
{
66
- __list_add (new , head -> prev , head );
66
+ __list_add (newhead , head -> prev , head );
67
67
}
68
68
69
69
/*
@@ -87,8 +87,8 @@ static inline void __list_del(struct list_head *prev, struct list_head *next)
87
87
static inline void list_del (struct list_head * entry )
88
88
{
89
89
__list_del (entry -> prev , entry -> next );
90
- entry -> next = ( void * ) 0 ;
91
- entry -> prev = ( void * ) 0 ;
90
+ entry -> next = NULL ;
91
+ entry -> prev = NULL ;
92
92
}
93
93
94
94
/**
@@ -180,12 +180,12 @@ static inline void list_splice_init(struct list_head *list,
180
180
* @type: the type of the struct this is embedded in.
181
181
* @member: the name of the list_struct within the struct.
182
182
*/
183
- #ifndef _WIN64
183
+ #ifndef _MSC_VER
184
184
#define list_entry (ptr , type , member ) \
185
- ((type * )((char *)(ptr)-(unsigned long)(&((type * )0)->member)))
185
+ ((type)((char *)(ptr)-(unsigned long)(&((type)0)->member)))
186
186
#else
187
- #define list_entry (ptr , type , member ) \
188
- ((type *)(( char *)(ptr)-(unsigned long long )(&((type *)0) ->member)))
187
+ #define list_entry (ptr , ptrtype , member ) \
188
+ (reinterpret_cast<ptrtype>(( char *)(ptr)-(char * )(&(reinterpret_cast<ptrtype>(1) ->member)) + 1 ))
189
189
#endif
190
190
191
191
/**
@@ -221,10 +221,17 @@ static inline void list_splice_init(struct list_head *list,
221
221
* @head: the head for your list.
222
222
* @member: the name of the list_struct within the struct.
223
223
*/
224
- #define list_for_each_entry (pos , head , member ) \
225
- for (pos = list_entry((head)->next, typeof(*pos), member); \
226
- &pos->member != (head); \
227
- pos = list_entry(pos->member.next, typeof(*pos), member))
224
+ #ifndef _MSC_VER
225
+ #define list_for_each_entry (pos , head , member ) \
226
+ for (pos = list_entry((head)->next, typeof(*pos), member); \
227
+ &pos->member != (head); \
228
+ pos = list_entry(pos->member.next, typeof(*pos), member))
229
+ #else
230
+ #define list_for_each_entry (pos , head , member ) \
231
+ for (pos = list_entry((head)->next, typeof(pos), member); \
232
+ &pos->member != (head); \
233
+ pos = list_entry(pos->member.next, typeof(pos), member))
234
+ #endif
228
235
229
236
/**
230
237
* list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
@@ -233,11 +240,21 @@ static inline void list_splice_init(struct list_head *list,
233
240
* @head: the head for your list.
234
241
* @member: the name of the list_struct within the struct.
235
242
*/
243
+ #ifndef _MSC_VER
244
+ #define list_for_each_entry_safe (pos , n , head , member ) \
245
+ for (pos = list_entry((head)->next, typeof(pos), member), \
246
+ n = list_entry(pos->member.next, typeof(pos), member); \
247
+ &pos->member != (head); \
248
+ pos = n, n = list_entry(n->member.next, typeof(n), member))
249
+
250
+ #else
251
+
236
252
#define list_for_each_entry_safe (pos , n , head , member ) \
237
- for (pos = list_entry((head)->next, typeof(*pos), member), \
238
- n = list_entry(pos->member.next, typeof(*pos), member); \
239
- &pos->member != (head); \
240
- pos = n, n = list_entry(n->member.next, typeof(*n), member))
253
+ for (pos = list_entry((head)->next, decltype(pos), member), \
254
+ n = list_entry(pos->member.next, decltype(pos), member); \
255
+ &(pos->member) != (head); \
256
+ pos = n, n = list_entry(n->member.next, decltype(n), member))
257
+ #endif
241
258
242
259
/**
243
260
* list_for_each_entry_continue - iterate over list of given type
0 commit comments