}
#endif /* ZB_FEATURE_GLOBAL_RSP_SYNC */
+static void __records_value_free(struct attribute_report_s **records,
+ int records_len)
+{
+ RET_IF(NULL == records);
+
+ for (int i = 0; i < records_len; i++) {
+ free(records[i]->value);
+ records[i]->value = NULL;
+ }
+}
+
+static void __records_free(struct attribute_report_s **records, int count)
+{
+ RET_IF(NULL == records);
+
+ for (int i = 0; i < count; i++) {
+ free(records[i]);
+ records[i] = NULL;
+ }
+ free(records);
+ records = NULL;
+}
+
static void _zbl_signal_handler(GDBusConnection *connection,
const gchar *sender_name, const gchar *object_path, const gchar *interface_name,
const gchar *signal_name, GVariant *parameters, gpointer user_data)
for (j = 0; j < count; j++) {
records[j] = calloc(1, sizeof(struct attribute_report_s));
if (NULL == records[j]) {
- for (i = 0; i < j; i++) {
- free(records[i]);
- records[i] = NULL;
- }
- free(records);
- records = NULL;
+ __records_value_free(records, j);
+ __records_free(records, count);
g_variant_iter_free(attr_iter);
g_variant_iter_free(dataType_iter);
data_size = value + 1;
records[j]->value = calloc(data_size, sizeof(unsigned char));
if (NULL == records[j]->value) {
- for (i = 0; i < j; i++) {
- free(records[i]->value);
- records[i]->value = NULL;
- }
- for (i = 0; i < count; i++) {
- free(records[i]);
- records[i] = NULL;
- }
- free(records);
- records = NULL;
+ __records_value_free(records, j);
+ __records_free(records, count);
ERR("calloc() Fail(%d)", errno);
goto EXIT_EVENT_HANDLER;
case ZB_ZCL_LONG_OCTET_STRING:
case ZB_ZCL_LONG_CHARACTER_STRING:
if (FALSE == g_variant_iter_loop(data_iter, "(y)", &value)) {
+ __records_free(records, count);
ERR("No Data");
goto EXIT_EVENT_HANDLER;
}
dSize[0] = value;
if (FALSE == g_variant_iter_loop(data_iter, "(y)", &value)) {
+ __records_free(records, count);
ERR("No Data");
goto EXIT_EVENT_HANDLER;
}
data_size += 2;
records[j]->value = calloc(data_size, sizeof(unsigned char));
if (NULL == records[j]->value) {
- for (i = 0; i < j; i++) {
- free(records[i]->value);
- records[i]->value = NULL;
- }
- for (i = 0; i < count; i++) {
- free(records[i]);
- records[i] = NULL;
- }
- free(records);
- records = NULL;
+ __records_value_free(records, j);
+ __records_free(records, count);
ERR("calloc() Fail(%d)", errno);
goto EXIT_EVENT_HANDLER;
for (i = dsizeIndex; i < data_size - 2; i++) {
if (FALSE == g_variant_iter_loop(data_iter, "(y)", &value)) {
+ __records_value_free(records, j);
+ __records_free(records, count);
ERR("No Data");
goto EXIT_EVENT_HANDLER;
}
default:
data_size = zb_zcl_get_data_size(records[j]->type);
if (data_size < 0) {
- for (i = 0; i < j; i++) {
- free(records[i]->value);
- records[i]->value = NULL;
- }
- for (i = 0; i < count; i++) {
- free(records[i]);
- records[i] = NULL;
- }
- free(records);
- records = NULL;
+ __records_value_free(records, j);
+ __records_free(records, count);
ERR("zb_zcl_get_data_size() Fail(%d)", data_size);
goto EXIT_EVENT_HANDLER;
}
records[j]->value = calloc(data_size, sizeof(unsigned char));
if (NULL == records[j]->value) {
- for (i = 0; i < j; i++) {
- free(records[i]->value);
- records[i]->value = NULL;
- }
- for (i = 0; i < count; i++) {
- free(records[i]);
- records[i] = NULL;
- }
- free(records);
- records = NULL;
+ __records_value_free(records, j);
+ __records_free(records, count);
ERR("calloc() Fail(%d)", errno);
goto EXIT_EVENT_HANDLER;
ev->data.global_attr_report = calloc(1, sizeof(zb_event_global_attr_report_s));
if (NULL == ev->data.global_attr_report) {
- ERR("Failed to memory allocation !");
- for (j = 0; j < count; j++) {
- free(records[j]->value);
- records[j]->value = NULL;
- if (records[j]) {
- free(records[j]);
- records[j] = NULL;
- }
- }
- if (records) {
- free(records);
- records = NULL;
- }
+ __records_value_free(records, count);
+ __records_free(records, count);
goto EXIT_EVENT_HANDLER;
}
container->event_handler(addr16, NULL, ZB_ZCL_GLOBAL_ATTRIBUTE_REPORT_EVENT, ev,
container->user_data);
- for (j = 0; j < count; j++) {
- if (records[j]->value) {
- free(records[j]->value);
- records[j]->value = NULL;
- }
- if (records[j]) {
- free(records[j]);
- records[j] = NULL;
- }
- }
- if (records) {
- free(records);
- records = NULL;
- }
+
+ __records_value_free(records, count);
+ __records_free(records, count);
+
if (ev->data.global_attr_report) {
free(ev->data.global_attr_report);
ev->data.global_attr_report = NULL;