| 269 | } |
| 270 | |
| 271 | void DeleteAllClasses(void) { |
| 272 | CipMessageRouterObject *message_router_object = g_first_object; /* get pointer to head of class registration list */ |
| 273 | CipMessageRouterObject *message_router_object_to_delete = NULL; |
| 274 | CipInstance *instance = NULL; |
| 275 | CipInstance *instance_to_delete = NULL; |
| 276 | |
| 277 | while (NULL != message_router_object) { |
| 278 | message_router_object_to_delete = message_router_object; |
| 279 | message_router_object = message_router_object->next; |
| 280 | |
| 281 | instance = message_router_object_to_delete->cip_class->instances; |
| 282 | while (NULL != instance) { |
| 283 | instance_to_delete = instance; |
| 284 | instance = instance->next; |
| 285 | if (message_router_object_to_delete->cip_class->number_of_attributes) /* if the class has instance attributes */ |
| 286 | { /* then free storage for the attribute array */ |
| 287 | CipFree(instance_to_delete->attributes); |
| 288 | } |
| 289 | CipFree(instance_to_delete); |
| 290 | } |
| 291 | |
| 292 | /*clear meta class data*/ |
| 293 | CipFree( |
| 294 | message_router_object_to_delete->cip_class->class_instance.cip_class |
| 295 | ->class_name); |
| 296 | CipFree( |
| 297 | message_router_object_to_delete->cip_class->class_instance.cip_class |
| 298 | ->services); |
| 299 | CipFree( |
| 300 | message_router_object_to_delete->cip_class->class_instance.cip_class); |
| 301 | /*clear class data*/ |
| 302 | CipFree( |
| 303 | message_router_object_to_delete->cip_class->class_instance.attributes); |
| 304 | CipFree(message_router_object_to_delete->cip_class->services); |
| 305 | CipFree(message_router_object_to_delete->cip_class); |
| 306 | CipFree(message_router_object_to_delete); |
| 307 | } |
| 308 | g_first_object = NULL; |
| 309 | } |
no test coverage detected