diff options
author | Jean Delvare <jdelvare@suse.de> | 2008-06-28 09:24:12 +0000 |
---|---|---|
committer | Jean Delvare <jdelvare@suse.de> | 2008-06-28 09:24:12 +0000 |
commit | 6a2f7095495fce68a21e4dbd2fbe6a91e1ddc0e2 (patch) | |
tree | 2e10588238503fba29629ac12df3031a8edecb47 /stub | |
parent | cc17bf04ca654d9a7ce46efa0db391dd3a7cf795 (diff) | |
download | i2c-tools-git-6a2f7095495fce68a21e4dbd2fbe6a91e1ddc0e2.tar.gz |
Stop on i2cset error.
git-svn-id: http://lm-sensors.org/svn/i2c-tools/trunk@5293 7894878c-1315-0410-8ee3-d5d059ff63e0
Diffstat (limited to 'stub')
-rwxr-xr-x | stub/i2c-stub-from-dump | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/stub/i2c-stub-from-dump b/stub/i2c-stub-from-dump index 64d0177..f91da1c 100755 --- a/stub/i2c-stub-from-dump +++ b/stub/i2c-stub-from-dump @@ -22,7 +22,7 @@ # a device you do not have access to, but of which you have a dump. use strict; -use vars qw($bus_nr $addr $bytes $words); +use vars qw($bus_nr $addr $bytes $words $err); # Kernel version detection code by Mark M. Hoffman, # copied from sensors-detect. @@ -108,6 +108,7 @@ sub load_kernel_drivers sub process_dump { my $dump = shift; + my $err = 0; open(DUMP, $dump) || die "Can't open $dump: $!\n"; OUTER_LOOP: @@ -119,10 +120,12 @@ sub process_dump shift(@values); for (my $i = 0; $i < 16 && (my $val = shift(@values)); $i++) { next if $val =~ m/X/; - last OUTER_LOOP if system("i2cset", "-y", - $bus_nr, $addr, - sprintf("0x\%02x", $offset+$i), - "0x$val", "b"); + if (system("i2cset", "-y", $bus_nr, $addr, + sprintf("0x\%02x", $offset+$i), + "0x$val", "b")) { + $err = 3; + last OUTER_LOOP; + } $bytes++; } } elsif (m/^([0-9a-f][08]):(( [0-9a-fX]{4}){8})/) { @@ -132,15 +135,19 @@ sub process_dump shift(@values); for (my $i = 0; $i < 8 && (my $val = shift(@values)); $i++) { next if $val =~ m/X/; - last OUTER_LOOP if system("i2cset", "-y", - $bus_nr, $addr, - sprintf("0x\%02x", $offset+$i), - "0x$val", "w"); + if (system("i2cset", "-y", $bus_nr, $addr, + sprintf("0x\%02x", $offset+$i), + "0x$val", "w")) { + $err = 3; + last OUTER_LOOP; + } $words++; } } } close(DUMP); + + return $err; } if ($>) { @@ -168,7 +175,7 @@ $bytes = $words = 0; # We don't want to see the output of 256 i2cset open(SAVEOUT, ">&STDOUT"); open(STDOUT, ">/dev/null"); -process_dump($ARGV[1]); +$err = process_dump($ARGV[1]); close(STDOUT); if ($bytes) { @@ -181,9 +188,9 @@ if ($words) { $bus_nr, oct($addr); } -if ($bytes + $words == 0) { +if (!$err && ($bytes + $words == 0)) { printf SAVEOUT "Only garbage found in dump file $ARGV[1]\n"; exit(1); } -exit(0); +exit($err); |