Skip to content

Commit 87e5f35

Browse files
Sanjin Trošeljveox
Sanjin Trošelj
authored andcommitted
VS2010 build: commit elist.h and relevant changes in sgminer.c and util.c
Cherry-picked by veox. Introduces a segfault. Expect a HEAD reset.
1 parent 5078db8 commit 87e5f35

File tree

3 files changed

+132
-100
lines changed

3 files changed

+132
-100
lines changed

elist.h

+40-23
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,14 @@ struct list_head {
3030
* This is only for internal list manipulation where we know
3131
* the prev/next entries already!
3232
*/
33-
static inline void __list_add(struct list_head *new,
33+
static inline void __list_add(struct list_head *newhead,
3434
struct list_head *prev,
3535
struct list_head *next)
3636
{
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;
4141
}
4242

4343
/**
@@ -48,9 +48,9 @@ static inline void __list_add(struct list_head *new,
4848
* Insert a new entry after the specified head.
4949
* This is good for implementing stacks.
5050
*/
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)
5252
{
53-
__list_add(new, head, head->next);
53+
__list_add(newhead, head, head->next);
5454
}
5555

5656
/**
@@ -61,9 +61,9 @@ static inline void list_add(struct list_head *new, struct list_head *head)
6161
* Insert a new entry before the specified head.
6262
* This is useful for implementing queues.
6363
*/
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)
6565
{
66-
__list_add(new, head->prev, head);
66+
__list_add(newhead, head->prev, head);
6767
}
6868

6969
/*
@@ -87,8 +87,8 @@ static inline void __list_del(struct list_head *prev, struct list_head *next)
8787
static inline void list_del(struct list_head *entry)
8888
{
8989
__list_del(entry->prev, entry->next);
90-
entry->next = (void *) 0;
91-
entry->prev = (void *) 0;
90+
entry->next = NULL;
91+
entry->prev = NULL;
9292
}
9393

9494
/**
@@ -180,12 +180,12 @@ static inline void list_splice_init(struct list_head *list,
180180
* @type: the type of the struct this is embedded in.
181181
* @member: the name of the list_struct within the struct.
182182
*/
183-
#ifndef _WIN64
183+
#ifndef _MSC_VER
184184
#define list_entry(ptr, type, member) \
185-
((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
185+
((type)((char *)(ptr)-(unsigned long)(&((type)0)->member)))
186186
#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))
189189
#endif
190190

191191
/**
@@ -221,10 +221,17 @@ static inline void list_splice_init(struct list_head *list,
221221
* @head: the head for your list.
222222
* @member: the name of the list_struct within the struct.
223223
*/
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
228235

229236
/**
230237
* 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,
233240
* @head: the head for your list.
234241
* @member: the name of the list_struct within the struct.
235242
*/
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+
236252
#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
241258

242259
/**
243260
* list_for_each_entry_continue - iterate over list of given type

0 commit comments

Comments
 (0)