From bdfc87d7245e4a24f5b1c2784144eb123415f812 Mon Sep 17 00:00:00 2001 From: Jean Delvare Date: Thu, 24 Apr 2008 12:34:51 +0000 Subject: [PATCH] Move the chip address parsing to a common function for consistency. git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@5204 7894878c-1315-0410-8ee3-d5d059ff63e0 --- tools/i2cbusses.c | 23 +++++++++++++++++++++++ tools/i2cbusses.h | 1 + tools/i2cdump.c | 10 ++-------- tools/i2cget.c | 6 ++---- tools/i2cset.c | 6 ++---- 5 files changed, 30 insertions(+), 16 deletions(-) diff --git a/tools/i2cbusses.c b/tools/i2cbusses.c index 434b8a3..96d22e6 100644 --- a/tools/i2cbusses.c +++ b/tools/i2cbusses.c @@ -344,6 +344,29 @@ int lookup_i2c_bus(const char *i2cbus_arg) return i2cbus; } +/* + * Parse a CHIP-ADDRESS command line argument and return the corresponding + * chip address, or a negative value if the address is invalid. + */ +int parse_i2c_address(const char *address_arg) +{ + long address; + char *end; + + address = strtol(address_arg, &end, 0); + if (*end || !*address_arg) { + fprintf(stderr, "Error: Chip address is not a number!\n"); + return -1; + } + if (address < 0x03 || address > 0x77) { + fprintf(stderr, "Error: Chip address out of range " + "(0x03-0x77)!\n"); + return -2; + } + + return address; +} + int open_i2c_dev(const int i2cbus, char *filename, const int quiet) { int file; diff --git a/tools/i2cbusses.h b/tools/i2cbusses.h index a2f3476..cbd794a 100644 --- a/tools/i2cbusses.h +++ b/tools/i2cbusses.h @@ -33,6 +33,7 @@ struct i2c_adap *gather_i2c_busses(void); void free_adapters(struct i2c_adap *adapters); int lookup_i2c_bus(const char *i2cbus_arg); +int parse_i2c_address(const char *address_arg); int open_i2c_dev(const int i2cbus, char *filename, const int quiet); int set_slave_addr(int file, int address, int force); diff --git a/tools/i2cdump.c b/tools/i2cdump.c index e618ee5..bad8ccf 100644 --- a/tools/i2cdump.c +++ b/tools/i2cdump.c @@ -97,14 +97,8 @@ int main(int argc, char *argv[]) help(); exit(1); } - address = strtol(argv[flags+2], &end, 0); - if (*end) { - fprintf(stderr, "Error: Second argument not a number!\n"); - help(); - exit(1); - } - if (address < 0x03 || address > 0x77) { - fprintf(stderr, "Error: Address out of range!\n"); + address = parse_i2c_address(argv[flags+2]); + if (address < 0) { help(); exit(1); } diff --git a/tools/i2cget.c b/tools/i2cget.c index e994f03..747a6a9 100644 --- a/tools/i2cget.c +++ b/tools/i2cget.c @@ -189,11 +189,9 @@ int main(int argc, char *argv[]) if (i2cbus < 0) help(); - address = strtol(argv[flags+2], &end, 0); - if (*end || address < 0x03 || address > 0x77) { - fprintf(stderr, "Error: Chip address invalid!\n"); + address = parse_i2c_address(argv[flags+2]); + if (address < 0) help(); - } if (!(flags+3 < argc)) { size = I2C_SMBUS_BYTE; diff --git a/tools/i2cset.c b/tools/i2cset.c index f721b87..88a62c6 100644 --- a/tools/i2cset.c +++ b/tools/i2cset.c @@ -83,11 +83,9 @@ int main(int argc, char *argv[]) if (i2cbus < 0) help(); - address = strtol(argv[flags+2], &end, 0); - if (*end || address < 0x03 || address > 0x77) { - fprintf(stderr, "Error: Chip address invalid!\n"); + address = parse_i2c_address(argv[flags+2]); + if (address < 0) help(); - } daddress = strtol(argv[flags+3], &end, 0); if (*end || daddress < 0 || daddress > 0xff) {