Edit: The code below has been modified to work as the problem has been solved.
Specifically, (*hardwareList.next_item)->next>
My guess the problem is this piece of code: *(hardwareList.next_item)->data
next_item is a pointer to a pointer, so my guess is that the compiler reads this as *((hardwareList.next_item)->data) which of course doesn't work - pointers don't have any members in C.
Try ((*(hardwareList.next_item))->data) to get the correct dereference order.