diff --git a/src/modbus.c b/src/modbus.c index e3737bb2..047ba4f8 100644 --- a/src/modbus.c +++ b/src/modbus.c @@ -837,7 +837,7 @@ int modbus_reply(modbus_t *ctx, rsp, FALSE, "Illegal data address 0x%0X in %s\n", - mapping_address < 0 ? address : address + nb, + mapping_address < 0 ? address : address + nb - 1, name); } else { rsp_length = ctx->backend->build_response_basis(&sft, rsp); @@ -878,7 +878,7 @@ int modbus_reply(modbus_t *ctx, rsp, FALSE, "Illegal data address 0x%0X in %s\n", - mapping_address < 0 ? address : address + nb, + mapping_address < 0 ? address : address + nb - 1, name); } else { int i; @@ -1002,7 +1002,7 @@ int modbus_reply(modbus_t *ctx, rsp, FALSE, "Illegal data address 0x%0X in write_bits\n", - mapping_address < 0 ? address : address + nb); + mapping_address < 0 ? address : address + nb - 1); } else { /* 6 = byte count */ modbus_set_bits_from_bytes( @@ -1038,7 +1038,7 @@ int modbus_reply(modbus_t *ctx, rsp, FALSE, "Illegal data address 0x%0X in write_registers\n", - mapping_address < 0 ? address : address + nb); + mapping_address < 0 ? address : address + nb - 1); } else { int i, j; for (i = mapping_address, j = 6; i < mapping_address + nb; i++, j += 2) { @@ -1149,7 +1149,7 @@ int modbus_reply(modbus_t *ctx, "Illegal data read address 0x%0X or write address 0x%0X " "write_and_read_registers\n", mapping_address < 0 ? address : address + nb, - mapping_address_write < 0 ? address_write : address_write + nb_write); + mapping_address_write < 0 ? address_write : address_write + nb_write - 1); } else { int i, j; rsp_length = ctx->backend->build_response_basis(&sft, rsp);