pdtest: Make exit code communicate the termination cause not counts
authorGerhard Sittig <gerhard.sittig@gmx.net>
Wed, 25 Jan 2017 20:09:20 +0000 (21:09 +0100)
committerGerhard Sittig <gerhard.sittig@gmx.net>
Wed, 25 Jan 2017 21:08:14 +0000 (22:08 +0100)
On one hand the exit(3) API might limit the range of values that can get
communicated to callers (a single byte is used in some implementations).
On the other hand wait(2) might interpret specific meaning into some of
the returned values (abnormal cause of termination, like unhandled
signals). So the use of error counts as exit codes for processes can be
severely constrained. For specific non-zero values of error counts, an
exit code of zero might be seen at the caller's side (modulo calculation
or truncation).

Don't pass error or difference counts to exit(3). Instead communicate
the kind of termination (error or difference or success) in exit codes
which reliably can get evaluated by callers.

decoder/pdtest

index 591ad1d5106a6b86544042816dfa99c9791749ed..58b6eee19244353226938a35cf1c7cc27d24328e 100755 (executable)
@@ -571,8 +571,12 @@ try:
             ERR("Could not find sigrok-dumps repository at %s" % dumps_dir)
             sys.exit(1)
         results, errors = run_tests(testlist, fix=opt_fix)
             ERR("Could not find sigrok-dumps repository at %s" % dumps_dir)
             sys.exit(1)
         results, errors = run_tests(testlist, fix=opt_fix)
+        ret = 0
         errs, diffs = get_run_tests_error_diff_counts(results)
         errs, diffs = get_run_tests_error_diff_counts(results)
-        ret = errs or diffs or 0
+        if errs:
+            ret = 1
+        elif diffs:
+            ret = 2
     elif opt_show:
         show_tests(testlist)
     elif opt_list:
     elif opt_show:
         show_tests(testlist)
     elif opt_list: