From 99c5a7c96e441f4d336740a2624de072a075c3ae Mon Sep 17 00:00:00 2001 From: Leah Neukirchen Date: Mon, 3 Jul 2017 11:48:06 +0200 Subject: parse_jobs: accept a multiplier on the CPU core number --- xe.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'xe.c') diff --git a/xe.c b/xe.c index 2825396..946ec5a 100644 --- a/xe.c +++ b/xe.c @@ -240,11 +240,28 @@ 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 (s[strlen(s) - 1] == 'x') { + n = (int)sysconf(_SC_NPROCESSORS_ONLN); + double d = 0.0; + errno = 0; + d = strtod(s, &e); + if (errno != 0 || *e != 'x' || d <= 0) { + fprintf(stderr, "xe: can't parse multiplier '%s'.\n", s); + exit(1); + } + n = (int)(d * n); + if (n < 1) + n = 1; + } else +#endif + { + 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 -- cgit 1.4.1