Edit: The code below has been modified to work as the problem has been solved.
Specifically, (*hardwareList.next_item)->next>
(*hardwareList.next_item)->next>
hardwareList.next_item is HardwareListItem**, so operator -> on it returns HardwareListItem*, which obviously is not a struct.
hardwareList.next_item
HardwareListItem**
->
HardwareListItem*
You're using too many pointers, it is confusing. Try to simplify your code, you have tons of bugs there.