#include "zb_common.h"
#include "zcl/zb_zcl_type.h"
+#define ZB_GUARD_CHAR 1
+#define ZB_ZCL_OCTAT_SIZE 1
+#define ZB_ZCL_LONG_OCTAT_SIZE 2
+
API const char* zb_get_zcl_error_message(int id)
{
const char* status_name = NULL;
free(v->str);
return ZIGBEE_ERROR_NO_DATA;
}
- v->str->v = calloc(v->str->n+1, 1);
+ v->str->v = calloc(v->str->n + ZB_GUARD_CHAR, sizeof(char));
if (NULL == v->str->v) {
free(v->str);
return ZIGBEE_ERROR_OUT_OF_MEMORY;
}
- memcpy(v->str->v, h->value+sizeof(v->str->n), v->str->n);
+ memcpy(v->str->v, h->value + ZB_ZCL_OCTAT_SIZE, v->str->n);
v->type = type;
v->size = v->str->n;
free(v->wstr);
return ZIGBEE_ERROR_NO_DATA;
}
- v->wstr->v = calloc(v->wstr->n+1, 1);
+ v->wstr->v = calloc(v->wstr->n + ZB_GUARD_CHAR, sizeof(char));
if (NULL == v->wstr->v) {
free(v->wstr);
return ZIGBEE_ERROR_OUT_OF_MEMORY;
}
- memcpy(v->wstr->v, h->value+sizeof(v->wstr->n), v->wstr->n);
+ memcpy(v->wstr->v, h->value + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->n);
v->type = type;
v->size = v->wstr->n;
len = zb_get_data_size(type);
if (0 < len) {
- h->value = calloc(len, sizeof(char));
+ h->value = calloc(len + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
memcpy(h->value, v->val, len);
} else if (ZB_ZCL_OCTAT_STRING == type || ZB_ZCL_CHRACTER_STRING == type) {
RETV_IF(NULL == v->str, ZIGBEE_ERROR_NO_DATA);
- h->value = calloc(v->str->n + sizeof(char), sizeof(char));
+ h->value = calloc(v->str->n + ZB_ZCL_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
h->value[0] = v->str->n;
- memcpy(h->value + sizeof(char), v->str->v + sizeof(char), v->str->n);
+ memcpy(h->value + ZB_ZCL_OCTAT_SIZE, v->str->v + ZB_ZCL_OCTAT_SIZE, v->str->n);
} else if (ZB_ZCL_LONG_OCTAT_STRING == type || ZB_ZCL_LONG_CHRACTER_STRING == type) {
RETV_IF(NULL == v->wstr, ZIGBEE_ERROR_NO_DATA);
- h->value = calloc(v->wstr->n + sizeof(short), sizeof(char));
+ h->value = calloc(v->wstr->n + ZB_ZCL_LONG_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
h->value[0] = v->wstr->n & 0xff;
h->value[1] = (v->wstr->n >> 8) & 0xff ;
- memcpy(h->value + sizeof(short), v->wstr->v + 2, v->wstr->n);
+ memcpy(h->value + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->v + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->n);
} else
return ZIGBEE_ERROR_NOT_SUPPORTED;
RETV_IF(NULL == h->str, ZIGBEE_ERROR_OUT_OF_MEMORY);
h->str->n = count;
/* The first 1 byte indicate invalid or length of string */
- h->str->v = calloc(h->str->n + sizeof(h->str->n), sizeof(unsigned char));
+ h->str->v = calloc(h->str->n + ZB_ZCL_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->str->v, ZIGBEE_ERROR_OUT_OF_MEMORY);
- memcpy(h->str->v, value+sizeof(h->str->n), h->str->n);
+ memcpy(h->str->v, value + ZB_ZCL_OCTAT_SIZE, h->str->n);
h->type = type;
h->size = count;
RETV_IF(NULL == h->wstr, ZIGBEE_ERROR_OUT_OF_MEMORY);
h->wstr->n = count;
/* The first 2 byte indicate invalid or length of string */
- h->wstr->v = calloc(h->wstr->n + sizeof(h->wstr->n), sizeof(wchar_t));
+ h->wstr->v = calloc(h->wstr->n + ZB_ZCL_LONG_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(wchar_t));
RETV_IF(NULL == h->wstr->v, ZIGBEE_ERROR_OUT_OF_MEMORY);
- memcpy(h->wstr->v, value+sizeof(h->wstr->n), h->wstr->n);
+ memcpy(h->wstr->v, value + ZB_ZCL_LONG_OCTAT_SIZE, h->wstr->n);
h->type = type;
h->size = count;
len = zb_get_data_size(h->type);
if (0 < len) {
- s = calloc(h->size + 1 , sizeof(char));
+ s = calloc(h->size + ZB_GUARD_CHAR , sizeof(char));
RETV_IF(NULL == s, ZIGBEE_ERROR_OUT_OF_MEMORY);
memcpy(s, h->val, len);
*count = len;
} else if (ZB_ZCL_OCTAT_STRING == h->type || ZB_ZCL_CHRACTER_STRING == h->type) {
RETV_IF(NULL == h->str, ZIGBEE_ERROR_NO_DATA);
- s = calloc(sizeof(char), h->str->n);
+ s = calloc(h->str->n + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == s, ZIGBEE_ERROR_OUT_OF_MEMORY);
- memcpy(s, h->str->v + sizeof(char), h->str->n);
+ memcpy(s, h->str->v + ZB_ZCL_OCTAT_SIZE, h->str->n);
*count = h->str->n;
} else if (ZB_ZCL_LONG_OCTAT_STRING == h->type || ZB_ZCL_LONG_CHRACTER_STRING == h->type) {
RETV_IF(NULL == h->wstr, ZIGBEE_ERROR_NO_DATA);
- s = calloc(sizeof(char), h->wstr->n);
+ s = calloc(h->wstr->n + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == s, ZIGBEE_ERROR_OUT_OF_MEMORY);
- memcpy(s, h->wstr->v + 2, h->wstr->n);
+ memcpy(s, h->wstr->v + ZB_ZCL_LONG_OCTAT_SIZE, h->wstr->n);
*count = h->wstr->n;
} else
return ZIGBEE_ERROR_NOT_SUPPORTED;
len = zb_get_data_size(type);
if (0 < len) {
- h->value = calloc(count + 1 , sizeof(char));
+ h->value = calloc(count + ZB_GUARD_CHAR , sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
memcpy(h->value, value, count);
} else if (ZB_ZCL_OCTAT_STRING == type || ZB_ZCL_CHRACTER_STRING == type) {
- h->value = calloc(count + sizeof(unsigned char) + 1, sizeof(char));
+ h->value = calloc(count + ZB_ZCL_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
/* The first 1 byte indicate invalid or length of string */
h->value[0] = count & 0xff;
- memcpy(h->value + sizeof(unsigned char), value + sizeof(unsigned char), count);
+ memcpy(h->value + ZB_ZCL_OCTAT_SIZE, value + ZB_ZCL_OCTAT_SIZE, count);
} else if (ZB_ZCL_LONG_OCTAT_STRING == h->type || ZB_ZCL_LONG_CHRACTER_STRING == h->type) {
- h->value = calloc(count + sizeof(unsigned short) + 1, sizeof(char));
+ h->value = calloc(count + ZB_ZCL_LONG_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
/* The first 2 byte indicate invalid or length of string */
h->value[0] = count & 0xff;
h->value[1] = (count >> 8) & 0xff ;
- memcpy(h->value + sizeof(unsigned short), value + sizeof(unsigned short), count);
+ memcpy(h->value + ZB_ZCL_LONG_OCTAT_SIZE, value + ZB_ZCL_LONG_OCTAT_SIZE, count);
} else
return ZIGBEE_ERROR_NOT_SUPPORTED;
len = zb_get_data_size(v->type);
if (0 < len) {
- h->value = calloc(v->size + 1 , sizeof(char));
+ h->value = calloc(v->size + ZB_GUARD_CHAR , sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
memcpy(h->value, v->val, v->size);
h->type = v->type;
RETV_IF(NULL == v->str, ZIGBEE_ERROR_NO_DATA);
/* 1 byte string size exception case */
RETV_IF(0xff - 1 < v->str->n, ZIGBEE_ERROR_PARAMETER_OUT_OF_RANGE);
- h->value = calloc(v->str->n + sizeof(char), sizeof(char));
+ h->value = calloc(v->str->n + ZB_ZCL_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
/* The first 1 byte indicate invalid or length of string */
h->value[0] = v->str->n & 0xff;
- memcpy(h->value + sizeof(char), v->str->v + sizeof(char), v->str->n);
+ memcpy(h->value + ZB_ZCL_OCTAT_SIZE, v->str->v + ZB_ZCL_OCTAT_SIZE, v->str->n);
} else if (ZB_ZCL_LONG_OCTAT_STRING == h->type || ZB_ZCL_LONG_CHRACTER_STRING == h->type) {
RETV_IF(NULL == v->wstr, ZIGBEE_ERROR_NO_DATA);
/* 2 byte string size exception case */
RETV_IF(0xffff - 1 < v->wstr->n, ZIGBEE_ERROR_PARAMETER_OUT_OF_RANGE);
- h->value = calloc(v->wstr->n + sizeof(short), sizeof(char));
+ h->value = calloc(v->wstr->n + ZB_ZCL_LONG_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
/* The first 2 byte indicate invalid or length of string */
h->value[0] = v->wstr->n & 0xff;
h->value[1] = (v->wstr->n >> 8) & 0xff ;
- memcpy(h->value + sizeof(short), v->wstr->v + 2, v->wstr->n);
+ memcpy(h->value + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->v + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->n);
} else
return ZIGBEE_ERROR_NOT_SUPPORTED;
free(v->str);
return ZIGBEE_ERROR_NO_DATA;
}
- v->str->v = calloc(v->str->n+1, 1);
+ v->str->v = calloc(v->str->n + ZB_ZCL_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
if (NULL == v->str->v) {
free(v->str);
return ZIGBEE_ERROR_OUT_OF_MEMORY;
}
- memcpy(v->str->v, h->value+sizeof(v->str->n), v->str->n);
+ memcpy(v->str->v, h->value + ZB_ZCL_OCTAT_SIZE, v->str->n);
v->type = h->type;
v->size = v->str->n;
free(v->wstr);
return ZIGBEE_ERROR_NO_DATA;
}
- v->wstr->v = calloc(v->wstr->n+1, 1);
+ v->wstr->v = calloc(v->wstr->n + ZB_ZCL_LONG_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
if (NULL == v->wstr->v) {
free(v->wstr);
return ZIGBEE_ERROR_OUT_OF_MEMORY;
}
- memcpy(v->wstr->v, h->value+sizeof(v->wstr->n), v->wstr->n);
+ memcpy(v->wstr->v, h->value + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->n);
v->type = h->type;
v->size = v->wstr->n;
len = zb_get_data_size(v->type);
if (0 < len) {
- h->value = calloc(v->size + 1 , sizeof(char));
+ h->value = calloc(v->size + ZB_GUARD_CHAR , sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
memcpy(h->value, v->val, v->size);
h->type = v->type;
} else if (ZB_ZCL_OCTAT_STRING == h->type || ZB_ZCL_CHRACTER_STRING == h->type) {
RETV_IF(NULL == v->str, ZIGBEE_ERROR_NO_DATA);
- h->value = calloc(v->str->n + sizeof(char), sizeof(char));
+ h->value = calloc(v->str->n + ZB_ZCL_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
/* The first 1 byte indicate invalid or length of string */
h->value[0] = v->str->n & 0xff;
- memcpy(h->value + sizeof(char), v->str->v + sizeof(char), v->str->n);
+ memcpy(h->value + ZB_ZCL_OCTAT_SIZE, v->str->v + ZB_ZCL_OCTAT_SIZE, v->str->n);
} else if (ZB_ZCL_LONG_OCTAT_STRING == h->type || ZB_ZCL_LONG_CHRACTER_STRING == h->type) {
RETV_IF(NULL == v->wstr, ZIGBEE_ERROR_NO_DATA);
- h->value = calloc(v->wstr->n + sizeof(short), sizeof(char));
+ h->value = calloc(v->wstr->n + ZB_ZCL_LONG_OCTAT_SIZE + ZB_GUARD_CHAR, sizeof(char));
RETV_IF(NULL == h->value, ZIGBEE_ERROR_OUT_OF_MEMORY);
/* The first 2 byte indicate invalid or length of string */
h->value[0] = v->wstr->n & 0xff;
h->value[1] = (v->wstr->n >> 8) & 0xff ;
- memcpy(h->value + sizeof(short), v->wstr->v + 2, v->wstr->n);
+ memcpy(h->value + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->v + ZB_ZCL_LONG_OCTAT_SIZE, v->wstr->n);
} else
return ZIGBEE_ERROR_NOT_SUPPORTED;