diff --git a/apps/epics/main.c b/apps/epics/main.c index f590a3bd..d801339f 100644 --- a/apps/epics/main.c +++ b/apps/epics/main.c @@ -299,7 +299,8 @@ static void MyReadPropertyMultipleAckHandler(uint8_t *service_request, } else { if (len < 0) { /* Eg, failed due to no segmentation */ Error_Detected = true; -} + } + rpm_data_free(rpm_data); free(rpm_data); } } diff --git a/apps/readpropm/main.c b/apps/readpropm/main.c index 99ab1616..7fa33d64 100644 --- a/apps/readpropm/main.c +++ b/apps/readpropm/main.c @@ -142,21 +142,8 @@ static void My_Read_Property_Multiple_Ack_Handler(uint8_t *service_request, if (len > 0) { while (rpm_data) { rpm_ack_print_data(rpm_data); - rpm_property = rpm_data->listOfProperties; - while (rpm_property) { - value = rpm_property->value; - while (value) { - old_value = value; - value = value->next; - free(old_value); - } - old_rpm_property = rpm_property; - rpm_property = rpm_property->next; - free(old_rpm_property); - } - old_rpm_data = rpm_data; - rpm_data = rpm_data->next; - free(old_rpm_data); + rpm_data = rpm_data_free(rpm_data); + } } else { fprintf(stderr, "RPM Ack Malformed! Freeing memory...\n"); diff --git a/src/bacnet/basic/binding/address.c b/src/bacnet/basic/binding/address.c index 719cf5b4..91700465 100644 --- a/src/bacnet/basic/binding/address.c +++ b/src/bacnet/basic/binding/address.c @@ -521,7 +521,9 @@ bool address_get_by_device( if ((pMatch->Flags & BAC_ADDR_BIND_REQ) == 0) { /* If bound then fetch data */ bacnet_address_copy(src, &pMatch->address); - *max_apdu = pMatch->max_apdu; + if (max_apdu) { + *max_apdu = pMatch->max_apdu; + } /* Prove we found it */ found = true; } diff --git a/src/bacnet/basic/service/h_rpm_a.c b/src/bacnet/basic/service/h_rpm_a.c index 57563abd..94b58ad2 100644 --- a/src/bacnet/basic/service/h_rpm_a.c +++ b/src/bacnet/basic/service/h_rpm_a.c @@ -293,7 +293,7 @@ void rpm_ack_print_data(BACNET_READ_ACCESS_DATA *rpm_data) * @param rpm_data - #BACNET_READ_ACCESS_DATA * @return RPM data from the next element in the linked list */ -static BACNET_READ_ACCESS_DATA *rpm_data_free(BACNET_READ_ACCESS_DATA *rpm_data) +BACNET_READ_ACCESS_DATA *rpm_data_free(BACNET_READ_ACCESS_DATA *rpm_data) { BACNET_READ_ACCESS_DATA *old_rpm_data = NULL; BACNET_PROPERTY_REFERENCE *rpm_property = NULL; diff --git a/src/bacnet/basic/service/h_rpm_a.h b/src/bacnet/basic/service/h_rpm_a.h index 32d3385d..29fb76e2 100644 --- a/src/bacnet/basic/service/h_rpm_a.h +++ b/src/bacnet/basic/service/h_rpm_a.h @@ -56,6 +56,9 @@ extern "C" { BACNET_STACK_EXPORT void rpm_ack_print_data( BACNET_READ_ACCESS_DATA * rpm_data); + BACNET_STACK_EXPORT + BACNET_READ_ACCESS_DATA *rpm_data_free( + BACNET_READ_ACCESS_DATA *rpm_data); #ifdef __cplusplus } diff --git a/src/bacnet/basic/service/s_cov.h b/src/bacnet/basic/service/s_cov.h index 3f9c965b..9e488d16 100644 --- a/src/bacnet/basic/service/s_cov.h +++ b/src/bacnet/basic/service/s_cov.h @@ -39,6 +39,7 @@ #include "bacnet/bacenum.h" #include "bacnet/apdu.h" #include "bacnet/cov.h" +#include "bacnet/npdu.h" #ifdef __cplusplus extern "C" { diff --git a/src/bacnet/cov.c b/src/bacnet/cov.c index 58b3e61c..c06139e6 100644 --- a/src/bacnet/cov.c +++ b/src/bacnet/cov.c @@ -768,7 +768,7 @@ void cov_data_value_list_link( * @param value_list - #BACNET_PROPERTY_VALUE with at least 2 entries * @param value - REAL present-value * @param in_alarm - value of in-alarm status-flags - * @param fault - value of in-alarm status-flags + * @param fault - value of fault status-flags * @param overridden - value of overridden status-flags * @param out_of_service - value of out-of-service status-flags *