mescc: Exit with non-zero exit code when subprocess fails.
authorPeter De Wachter <pdewacht@gmail.com>
Tue, 16 Oct 2018 18:40:35 +0000 (20:40 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 16 Oct 2018 18:40:35 +0000 (20:40 +0200)
system* returns the result of waitpid. So, suppose that a subprocess
fails with exit code 1. Then the waitpid return value will be 256.
And exit(256) is equivalent to exit(0).

Modified-by: Jan Nieuwenhuizen <janneke@gnu.org>
* mes/module/mes/posix.mes (status:exit-val): New function.
* module/mescc/mescc.scm (assert-system*): Use it.

mes/module/mes/posix.mes
module/mescc/mescc.scm

index ae6288f71daa78ca69caa51172213680464acecf..3f081d5b5004b71a8249c13c907e3cddc4c30bdc 100644 (file)
@@ -57,3 +57,6 @@
 (define (waitpid pid . options)
   (let ((options (if (null? options) 0 (car options))))
     (core:waitpid pid options)))
+
+(define (status:exit-val status)
+  (ash status -8))
index be06d943feed9f09e9558bfe097d9685669b50b9..e3d93a1ec24d5ce7ff534e5ba2cd7a092c5e68d6 100644 (file)
   (let ((status (apply system* args)))
     (when (not (zero? status))
       (stderr "mescc: failed: ~a\n" (string-join args))
-      (exit status))
+      (exit (status:exit-val status)))
     status))
 
 (define (multi-opt option-name) (lambda (o) (and (eq? (car o) option-name) (cdr o))))