about summary refs log tree commit diff
path: root/xe.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-02-06 20:03:13 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2016-02-06 20:03:13 +0100
commit86fa5ec3d5bd08d5ea5282aafb8a1d02917a088b (patch)
tree32022429559c150420b088582bc46ebec1560b63 /xe.c
parentd0cc05244f2cf598f98dbaf42c2461be9763b0a4 (diff)
downloadxe-86fa5ec3d5bd08d5ea5282aafb8a1d02917a088b.tar.gz
xe-86fa5ec3d5bd08d5ea5282aafb8a1d02917a088b.tar.xz
xe-86fa5ec3d5bd08d5ea5282aafb8a1d02917a088b.zip
drop -k and make it default, add -F to exit on errors immediately
Diffstat (limited to 'xe.c')
-rw-r--r--xe.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/xe.c b/xe.c
index cab012e..77acdd7 100644
--- a/xe.c
+++ b/xe.c
@@ -28,7 +28,8 @@ static char *sflag;
 static int maxatonce = 1;
 static int maxjobs = 1;
 static int runjobs = 0;
-static int Rflag, Aflag, aflag, kflag, nflag, vflag;
+static int failed = 0;
+static int Aflag, Fflag, Rflag, aflag, nflag, vflag;
 static long iterations = 0;
 static FILE *traceout;
 
@@ -84,9 +85,13 @@ mywait()
 		// no other error possible?
 	}	
 	
-	if (WIFEXITED(status) && !kflag) {
+	if (WIFEXITED(status)) {
 		if (WEXITSTATUS(status) >= 1 && WEXITSTATUS(status) <= 125) {
-			exit(123);
+			if (Fflag) {
+				fprintf(stderr, "xe: pid %d exited with status %d\n", pid, WEXITSTATUS(status));
+				exit(123);
+			}
+			failed = 1;
 		} else if (WEXITSTATUS(status) == 255) {
 			fprintf(stderr, "xe: pid %d exited with status 255\n", pid);
 			exit(124);
@@ -275,22 +280,22 @@ main(int argc, char *argv[], char *envp[])
 
 	traceout = stdout;
 
-	while ((c = getopt(argc, argv, "+0A:I:N:Raj:kns:v")) != -1)
+	while ((c = getopt(argc, argv, "+0A:FI:N:Raj:ns:v")) != -1)
 		switch(c) {
 		case '0': delim = '\0'; break;
 		case 'A': argsep = optarg; Aflag++; break;
 		case 'I': replace = optarg; break;
 		case 'N': maxatonce = atoi(optarg); break;
+		case 'F': Fflag++; break;
 		case 'R': Rflag++; break;
 		case 'a': aflag++; break;
 		case 'j': maxjobs = parse_jobs(optarg); break;
-		case 'k': kflag++; break;
 		case 'n': nflag++; break;
 		case 's': sflag = optarg; break;
 		case 'v': vflag++; traceout = stderr; break;
 		default:
 			fprintf(stderr, 
-			    "Usage: %s [-0Rknv] [-I arg] [-N maxargs] [-j maxjobs] COMMAND...\n"
+			    "Usage: %s [-0FRnv] [-I arg] [-N maxargs] [-j maxjobs] COMMAND...\n"
 			    "     | -s SHELLSCRIPT\n"
 			    "     | -a COMMAND... -- ARGS...\n"
 			    "     | -A ARGSEP COMMAND... ARGSEP ARGS...\n",
@@ -376,5 +381,7 @@ main(int argc, char *argv[], char *envp[])
 
 	if (Rflag && iterations == 0)
 		return 122;
+	if (failed)
+		return 123;
 	return 0;
 }