summaryrefslogtreecommitdiff
path: root/stub
diff options
context:
space:
mode:
authorJean Delvare <jdelvare@suse.de>2008-06-28 09:24:12 +0000
committerJean Delvare <jdelvare@suse.de>2008-06-28 09:24:12 +0000
commit6a2f7095495fce68a21e4dbd2fbe6a91e1ddc0e2 (patch)
tree2e10588238503fba29629ac12df3031a8edecb47 /stub
parentcc17bf04ca654d9a7ce46efa0db391dd3a7cf795 (diff)
downloadi2c-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-xstub/i2c-stub-from-dump31
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);