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.