#define LINK_FRONT(link, first, last, next, prev) \
do \
{ \
(link)->prev = NULL; \
(link)->next = NULL; \
if( (first) ) \
{ \
(link)->next = (first); \
(first)->prev = (link); \
(first) = (link); \
} \
else \
{ \
(first) = (link); \
(last) = (link); \
} \
} while(0)
#define LINK_FRONT(link, first, last, next, prev)\
do{ \
if(!(link)->prev) \
(first) = (link)->next; \
else \
(link)->prev->next = (link)->next; \
if(!(link)->next) \
(last) = (link)->prev; \
else \
(link)->next->prev = (link)->prev; \
if(!(last)) \
(last) = (link); \
else \
(first)->prev = (link); \
(link)->prev = NULL; \
(link)->next = (first); \
(first) = (link); \
}while(0)
#define LINK_FRONT(link, first, last, next, prev) \
do{ \
UNLINK((link), (first), (last), (next), (prev)); \
LINK((link), (last), (first), (prev), (next)); \
}while(0)
#define LINK_FRONT(link, first, last, next, prev)\
do{ \
if((first) != (link)){ \
(link)->prev->next = (link)->next; \
if(!(link)->next) \
(last) = (link)->prev; \
else \
(link)->next->prev = (link)->prev; \
(first)->prev = (link); \
(link)->prev = NULL; \
(link)->next = (first); \
(first) = (link); \
}\
}while(0)
//Links an object to the FRONT of the list
void link_front(SHIP_DATA *link, SHIP_DATA *first, SHIP_DATA *last)
{
if(first != link){
link->prev_in_starsystem->next_in_starsystem = link->next_in_starsystem;
if(!link->next_in_starsystem)
last = link->prev_in_starsystem;
else
link->next_in_starsystem->prev_in_starsystem = link->prev_in_starsystem;
first->prev_in_starsystem = link;
link->prev_in_starsystem = NULL;
link->next_in_starsystem = first;
first = link;
}
return;
}
Here is my method:
I call this LINK_FRONT(target, ship->starsystem->first_ship, ship->starsystem->last_ship, next_in_starsystem, prev_in_starsystem);
and then the mud freezes up, but GDB acts like it is fine. Anyone know what might be wrong with my method?