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.
hardwareList.next_item is HardwareListItem**, so operator -> on it returns HardwareListItem*, which obviously is not a struct.
You're using too many pointers, it is confusing. Try to simplify your code, you have tons of bugs there.