Commit d8881ea190182225c52b111c61578a907084b489
1 parent
93a05986
Move check of device earlier to avoid a free call
Showing
1 changed file
with
7 additions
and
8 deletions
src/modbus-rtu.c
| @@ -1146,6 +1146,13 @@ modbus_t* modbus_new_rtu(const char *device, | @@ -1146,6 +1146,13 @@ modbus_t* modbus_new_rtu(const char *device, | ||
| 1146 | modbus_t *ctx; | 1146 | modbus_t *ctx; |
| 1147 | modbus_rtu_t *ctx_rtu; | 1147 | modbus_rtu_t *ctx_rtu; |
| 1148 | 1148 | ||
| 1149 | + /* Check device argument */ | ||
| 1150 | + if (device == NULL || (*device) == 0) { | ||
| 1151 | + fprintf(stderr, "The device string is empty\n"); | ||
| 1152 | + errno = EINVAL; | ||
| 1153 | + return NULL; | ||
| 1154 | + } | ||
| 1155 | + | ||
| 1149 | /* Check baud argument */ | 1156 | /* Check baud argument */ |
| 1150 | if (baud == 0) { | 1157 | if (baud == 0) { |
| 1151 | fprintf(stderr, "The baud rate value must not be zero\n"); | 1158 | fprintf(stderr, "The baud rate value must not be zero\n"); |
| @@ -1160,14 +1167,6 @@ modbus_t* modbus_new_rtu(const char *device, | @@ -1160,14 +1167,6 @@ modbus_t* modbus_new_rtu(const char *device, | ||
| 1160 | ctx_rtu = (modbus_rtu_t *)ctx->backend_data; | 1167 | ctx_rtu = (modbus_rtu_t *)ctx->backend_data; |
| 1161 | ctx_rtu->device = NULL; | 1168 | ctx_rtu->device = NULL; |
| 1162 | 1169 | ||
| 1163 | - /* Check device argument */ | ||
| 1164 | - if (device == NULL || (*device) == 0) { | ||
| 1165 | - fprintf(stderr, "The device string is empty\n"); | ||
| 1166 | - modbus_free(ctx); | ||
| 1167 | - errno = EINVAL; | ||
| 1168 | - return NULL; | ||
| 1169 | - } | ||
| 1170 | - | ||
| 1171 | /* Device name and \0 */ | 1170 | /* Device name and \0 */ |
| 1172 | ctx_rtu->device = (char *) malloc((strlen(device) + 1) * sizeof(char)); | 1171 | ctx_rtu->device = (char *) malloc((strlen(device) + 1) * sizeof(char)); |
| 1173 | strcpy(ctx_rtu->device, device); | 1172 | strcpy(ctx_rtu->device, device); |