$r = system "..\\windump -n -r $input $options 2>NUL | sed 's/\\r//' | tee NEW/$output | diff $output - >DIFF/$output.diff";
}
else {
- $r = system "../tcpdump 2>/dev/null -n -r $input $options | tee NEW/$output | diff $output - >DIFF/$output.diff";
+ # we used to do this as a nice pipeline, but the problem is that $r fails to
+ # to be set properly if the tcpdump core dumps.
+ $r = system "../tcpdump 2>/dev/null -n -r $input $options >NEW/$output";
+ if($r == 0) {
+ $r = system "cat NEW/$output | diff $output - >DIFF/$output.diff";
+ }
+ #print sprintf("END: %08x\n", $r);
}
if($r == 0) {
open FOUT, '>>failure-outputs.txt';
printf FOUT "Failed test: $name\n\n";
close FOUT;
-system "cat DIFF/$output.diff >> failure-outputs.txt";
+if(-f "DIFF/$output.diff") {
+ system "cat DIFF/$output.diff >> failure-outputs.txt";
+}
if($r == -1) {
print " (failed to execute: $!)\n";
exit 30;
}
-if($r & 127) {
- printf " (terminated with signal %u, %s coredump)\n", ($r & 127), ($r & 128) ? 'with' : 'without';
- exit ($r & 128) ? 10 : 20;
+
+# this is not working right, $r == 0x8b00 when there is a core dump.
+# clearly, we need some platform specific perl magic to take this apart, so look for "core"
+# too.
+if($r & 127 || -f "core") {
+ my $with = ($r & 128) ? 'with' : 'without';
+ if(-f "core") {
+ $with = "with";
+ }
+ printf " (terminated with signal %u, %s coredump)\n", ($r & 127), $with;
+ exit ($r & 128) ? 10 : 20;
}
print "\n";
exit $r >> 8;