aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWolfram Sang <wsa+renesas@sang-engineering.com>2017-04-03 19:24:20 +0200
committerWolfram Sang <wsa@the-dreams.de>2017-04-07 14:10:23 +0200
commit1ed92ae76a56789d208561b873e500b79c90f198 (patch)
treec55c49dc9e8fad90fad9352f8d75afabba4f53fb
parent9fc53a7fc669b9a857e4a91ebba95c588285bd7f (diff)
downloadi2c-tools-1ed92ae76a56789d208561b873e500b79c90f198.tar.gz
i2ctransfer: replace broken "force" handling
Probably because of a bad rebase, the old and bogus handling (v1) of "force" slipped into the latest version of the patch (v3). Apply the better version from v2 which does the error handling correct and makes the code a lot easier to understand. Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
-rw-r--r--tools/i2ctransfer.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/tools/i2ctransfer.c b/tools/i2ctransfer.c
index 7d06451..38b6b4a 100644
--- a/tools/i2ctransfer.c
+++ b/tools/i2ctransfer.c
@@ -199,8 +199,6 @@ int main(int argc, char *argv[])
arg_ptr = end;
if (*arg_ptr) {
- int whole_range_ok;
-
if (*arg_ptr++ != '@') {
fprintf(stderr, "Error: Unknown separator after length\n");
goto err_out_with_arg;
@@ -211,16 +209,22 @@ int main(int argc, char *argv[])
* the address here.
*/
- address = parse_i2c_address(arg_ptr);
- /* With 'force', allow whole address range */
- whole_range_ok = force && address == -2;
- if (address < 0 && !whole_range_ok)
- goto err_out_with_arg;
-
- /* Ensure address is not busy */
- if (!force && set_slave_addr(file, address, 0))
- goto err_out_with_arg;
-
+ if (!force) {
+ address = parse_i2c_address(arg_ptr);
+ if (address < 0)
+ goto err_out_with_arg;
+
+ /* Ensure address is not busy */
+ if (set_slave_addr(file, address, 0))
+ goto err_out_with_arg;
+ } else {
+ /* 'force' allows whole address range */
+ address = strtol(arg_ptr, &end, 0);
+ if (arg_ptr == end || *end || address > 0x7f) {
+ fprintf(stderr, "Error: Invalid chip address\n");
+ goto err_out_with_arg;
+ }
+ }
} else {
/* Reuse last address if possible */
if (address < 0) {