about summary refs log tree commit diff
path: root/xe.c
diff options
context:
space:
mode:
authorChristian Neukirchen <chneukirchen@gmail.com>2016-01-16 22:33:22 +0100
committerChristian Neukirchen <chneukirchen@gmail.com>2016-01-16 22:33:22 +0100
commit1a3f3fb3b31fe915cac4bf8c2f49553d11f0b83f (patch)
treed4aa5997ef0a72d1ebd8b01f7360769f28fc057e /xe.c
parentf79277999db1361e265650eeb8b9239dc271be93 (diff)
downloadxe-1a3f3fb3b31fe915cac4bf8c2f49553d11f0b83f.tar.gz
xe-1a3f3fb3b31fe915cac4bf8c2f49553d11f0b83f.tar.xz
xe-1a3f3fb3b31fe915cac4bf8c2f49553d11f0b83f.zip
add -j0 to use as many cores as available v0.4
Diffstat (limited to 'xe.c')
-rw-r--r--xe.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/xe.c b/xe.c
index 0fc55a8..b967820 100644
--- a/xe.c
+++ b/xe.c
@@ -226,6 +226,29 @@ toolong()
 }
 
 int
+parse_jobs(char *s)
+{
+	char *e;
+	int n;
+
+	errno = 0;
+	n = strtol(s, &e, 10);
+	if (errno != 0 || *e) {
+		fprintf(stderr, "xe: can't parse number '%s'.\n", s);
+		exit(1);
+	}
+
+#ifdef _SC_NPROCESSORS_ONLN
+	if (n <= 0)
+		n = (int)sysconf(_SC_NPROCESSORS_ONLN);
+#endif
+	if (n <= 0)
+		n = 1;
+
+	return n;
+}
+
+int
 main(int argc, char *argv[], char *envp[])
 {
 	char c;
@@ -260,7 +283,7 @@ main(int argc, char *argv[], char *envp[])
 		case 'N': maxatonce = atoi(optarg); break;
 		case 'R': Rflag++; break;
 		case 'a': aflag++; break;
-		case 'j': maxjobs = atoi(optarg); break;
+		case 'j': maxjobs = parse_jobs(optarg); break;
 		case 'k': kflag++; break;
 		case 'n': nflag++; break;
 		case 's': sflag = optarg; break;