|
@@ -2036,53 +2036,67 @@ modbus_mapping_t* modbus_mapping_new(int nb_bits, int nb_input_bits,
|
|
|
|
|
|
/* 0X */
|
|
|
mb_mapping->nb_bits = nb_bits;
|
|
|
- mb_mapping->tab_bits =
|
|
|
- (uint8_t *) malloc(nb_bits * sizeof(uint8_t));
|
|
|
- if (mb_mapping->tab_bits == NULL) {
|
|
|
- free(mb_mapping);
|
|
|
- return NULL;
|
|
|
+ if (nb_bits == 0) {
|
|
|
+ mb_mapping->tab_bits = NULL;
|
|
|
+ } else {
|
|
|
+ /* Negative number raises a POSIX error */
|
|
|
+ mb_mapping->tab_bits =
|
|
|
+ (uint8_t *) malloc(nb_bits * sizeof(uint8_t));
|
|
|
+ if (mb_mapping->tab_bits == NULL) {
|
|
|
+ free(mb_mapping);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ memset(mb_mapping->tab_bits, 0, nb_bits * sizeof(uint8_t));
|
|
|
}
|
|
|
- memset(mb_mapping->tab_bits, 0,
|
|
|
- nb_bits * sizeof(uint8_t));
|
|
|
|
|
|
/* 1X */
|
|
|
mb_mapping->nb_input_bits = nb_input_bits;
|
|
|
- mb_mapping->tab_input_bits =
|
|
|
- (uint8_t *) malloc(nb_input_bits * sizeof(uint8_t));
|
|
|
- if (mb_mapping->tab_input_bits == NULL) {
|
|
|
- free(mb_mapping);
|
|
|
- free(mb_mapping->tab_bits);
|
|
|
- return NULL;
|
|
|
+ if (nb_input_bits == 0) {
|
|
|
+ mb_mapping->tab_input_bits = NULL;
|
|
|
+ } else {
|
|
|
+ mb_mapping->tab_input_bits =
|
|
|
+ (uint8_t *) malloc(nb_input_bits * sizeof(uint8_t));
|
|
|
+ if (mb_mapping->tab_input_bits == NULL) {
|
|
|
+ free(mb_mapping);
|
|
|
+ free(mb_mapping->tab_bits);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ memset(mb_mapping->tab_input_bits, 0, nb_input_bits * sizeof(uint8_t));
|
|
|
}
|
|
|
- memset(mb_mapping->tab_input_bits, 0,
|
|
|
- nb_input_bits * sizeof(uint8_t));
|
|
|
|
|
|
/* 4X */
|
|
|
mb_mapping->nb_registers = nb_registers;
|
|
|
- mb_mapping->tab_registers =
|
|
|
- (uint16_t *) malloc(nb_registers * sizeof(uint16_t));
|
|
|
- if (mb_mapping->tab_registers == NULL) {
|
|
|
- free(mb_mapping);
|
|
|
- free(mb_mapping->tab_bits);
|
|
|
- free(mb_mapping->tab_input_bits);
|
|
|
- return NULL;
|
|
|
+ if (nb_registers == 0) {
|
|
|
+ mb_mapping->tab_registers = NULL;
|
|
|
+ } else {
|
|
|
+ mb_mapping->tab_registers =
|
|
|
+ (uint16_t *) malloc(nb_registers * sizeof(uint16_t));
|
|
|
+ if (mb_mapping->tab_registers == NULL) {
|
|
|
+ free(mb_mapping);
|
|
|
+ free(mb_mapping->tab_bits);
|
|
|
+ free(mb_mapping->tab_input_bits);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ memset(mb_mapping->tab_registers, 0, nb_registers * sizeof(uint16_t));
|
|
|
}
|
|
|
- memset(mb_mapping->tab_registers, 0,
|
|
|
- nb_registers * sizeof(uint16_t));
|
|
|
|
|
|
/* 3X */
|
|
|
mb_mapping->nb_input_registers = nb_input_registers;
|
|
|
- mb_mapping->tab_input_registers =
|
|
|
- (uint16_t *) malloc(nb_input_registers * sizeof(uint16_t));
|
|
|
- if (mb_mapping->tab_input_registers == NULL) {
|
|
|
- free(mb_mapping);
|
|
|
- free(mb_mapping->tab_bits);
|
|
|
- free(mb_mapping->tab_input_bits);
|
|
|
- free(mb_mapping->tab_registers);
|
|
|
- return NULL;
|
|
|
+ if (nb_input_registers == 0) {
|
|
|
+ mb_mapping->tab_input_registers = NULL;
|
|
|
+ } else {
|
|
|
+ mb_mapping->tab_input_registers =
|
|
|
+ (uint16_t *) malloc(nb_input_registers * sizeof(uint16_t));
|
|
|
+ if (mb_mapping->tab_input_registers == NULL) {
|
|
|
+ free(mb_mapping);
|
|
|
+ free(mb_mapping->tab_bits);
|
|
|
+ free(mb_mapping->tab_input_bits);
|
|
|
+ free(mb_mapping->tab_registers);
|
|
|
+ return NULL;
|
|
|
+ }
|
|
|
+ memset(mb_mapping->tab_input_registers, 0,
|
|
|
+ nb_input_registers * sizeof(uint16_t));
|
|
|
}
|
|
|
- memset(mb_mapping->tab_input_registers, 0,
|
|
|
- nb_input_registers * sizeof(uint16_t));
|
|
|
|
|
|
return mb_mapping;
|
|
|
}
|