summaryrefslogtreecommitdiffstats
path: root/usr.bin/printf
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2014-05-11 17:28:57 +0000
committerpfg <pfg@FreeBSD.org>2014-05-11 17:28:57 +0000
commita6ebcfc558864aa5250fb99f13caa1450d9dff01 (patch)
treef79d334dae29315166b83e6a9b51e42e47801a6f /usr.bin/printf
parent4b893562e08c84b2e060dcbdc1c7cd8b55faeb1d (diff)
downloadFreeBSD-src-a6ebcfc558864aa5250fb99f13caa1450d9dff01.zip
FreeBSD-src-a6ebcfc558864aa5250fb99f13caa1450d9dff01.tar.gz
printf: fix regression after illumos merges.
The "bltin/bltin.h" wrappers do not support exit() and attempting to call it will exit sh completely. Note that errx() is acceptable but will always return with status 2. Reported by: jilles (and the testing framework) Fix by: jilles Pointyhat: pfg
Diffstat (limited to 'usr.bin/printf')
-rw-r--r--usr.bin/printf/printf.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/usr.bin/printf/printf.c b/usr.bin/printf/printf.c
index 055657f..7a7e055 100644
--- a/usr.bin/printf/printf.c
+++ b/usr.bin/printf/printf.c
@@ -101,6 +101,8 @@ static void usage(void);
static const char digits[] = "0123456789";
+static char end_fmt[1];
+
static int myargc;
static char **myargv;
static char **gargv;
@@ -171,11 +173,11 @@ main(int argc, char *argv[])
fmt += 2;
} else {
fmt = printf_doformat(fmt, &rval);
- if (fmt == NULL) {
+ if (fmt == NULL || fmt == end_fmt) {
#ifdef SHELL
INTON;
#endif
- return (1);
+ return (fmt == NULL ? 1 : rval);
}
end = 0;
}
@@ -372,7 +374,7 @@ printf_doformat(char *fmt, int *rval)
fputs(p, stdout);
free(p);
if (getout)
- exit(*rval);
+ return (end_fmt);
break;
}
case 'c': {
OpenPOWER on IntegriCloud