summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bin/sh/bltin/bltin.h21
-rw-r--r--tools/regression/bin/sh/builtins/printf3.05
-rw-r--r--tools/regression/bin/sh/builtins/printf4.05
-rw-r--r--usr.bin/printf/printf.c30
4 files changed, 29 insertions, 32 deletions
diff --git a/bin/sh/bltin/bltin.h b/bin/sh/bltin/bltin.h
index 0fc8a28..6618108 100644
--- a/bin/sh/bltin/bltin.h
+++ b/bin/sh/bltin/bltin.h
@@ -57,21 +57,12 @@
#define fwrite(ptr, size, nmemb, file) outbin(ptr, (size) * (nmemb), file)
#define fflush flushout
#define INITARGS(argv)
-#define warnx1(a, b, c) { \
- char buf[64]; \
- (void)snprintf(buf, sizeof(buf), a); \
- error("%s", buf); \
-}
-#define warnx2(a, b, c) { \
- char buf[64]; \
- (void)snprintf(buf, sizeof(buf), a, b); \
- error("%s", buf); \
-}
-#define warnx3(a, b, c) { \
- char buf[64]; \
- (void)snprintf(buf, sizeof(buf), a, b, c); \
- error("%s", buf); \
-}
+#define warnx(...) do { \
+ out2fmt_flush("%s: ", commandname); \
+ out2fmt_flush(__VA_ARGS__); \
+ out2fmt_flush("\n"); \
+ } while (0)
+#define errx(exitstatus, ...) error(__VA_ARGS__)
#else
#undef NULL
diff --git a/tools/regression/bin/sh/builtins/printf3.0 b/tools/regression/bin/sh/builtins/printf3.0
new file mode 100644
index 0000000..0e7ea85
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/printf3.0
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+set -e
+v=$(! printf "%d" @wrong 2>/dev/null)
+[ "$v" = "0" ]
diff --git a/tools/regression/bin/sh/builtins/printf4.0 b/tools/regression/bin/sh/builtins/printf4.0
new file mode 100644
index 0000000..2dd3e72
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/printf4.0
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+set -e
+v=$(! printf "%d" 4wrong 2>/dev/null)
+[ "$v" = "4" ]
diff --git a/usr.bin/printf/printf.c b/usr.bin/printf/printf.c
index ef8111f..d2fd37e2 100644
--- a/usr.bin/printf/printf.c
+++ b/usr.bin/printf/printf.c
@@ -60,10 +60,6 @@ static const char rcsid[] =
#include "bltin/bltin.h"
#include "memalloc.h"
#include "error.h"
-#else
-#define warnx1(a, b, c) warnx(a)
-#define warnx2(a, b, c) warnx(a, b)
-#define warnx3(a, b, c) warnx(a, b, c)
#endif
#define PF(f, func) do { \
@@ -165,7 +161,7 @@ main(int argc, char *argv[])
}
if (end == 1) {
- warnx1("missing format character", NULL, NULL);
+ warnx("missing format character");
#ifdef SHELL
INTON;
#endif
@@ -226,7 +222,7 @@ printf_doformat(char *start, int *rval)
} else
haveprec = 0;
if (!*fmt) {
- warnx1("missing format character", NULL, NULL);
+ warnx("missing format character");
return (NULL);
}
@@ -244,7 +240,7 @@ printf_doformat(char *start, int *rval)
mod_ldbl = 1;
fmt++;
if (!strchr("aAeEfFgG", *fmt)) {
- warnx2("bad modifier L for %%%c", *fmt, NULL);
+ warnx("bad modifier L for %%%c", *fmt);
return (NULL);
}
} else {
@@ -266,7 +262,7 @@ printf_doformat(char *start, int *rval)
p = strdup(getstr());
#endif
if (p == NULL) {
- warnx2("%s", strerror(ENOMEM), NULL);
+ warnx("%s", strerror(ENOMEM));
return (NULL);
}
getout = escape(p, 0, &len);
@@ -328,7 +324,7 @@ printf_doformat(char *start, int *rval)
break;
}
default:
- warnx2("illegal format character %c", convch, NULL);
+ warnx("illegal format character %c", convch);
return (NULL);
}
*fmt = nextch;
@@ -352,7 +348,7 @@ mknum(char *str, char ch)
if ((newcopy = realloc(copy, newlen)) == NULL)
#endif
{
- warnx2("%s", strerror(ENOMEM), NULL);
+ warnx("%s", strerror(ENOMEM));
return (NULL);
}
copy = newcopy;
@@ -465,7 +461,7 @@ getint(int *ip)
return (1);
rval = 0;
if (val < INT_MIN || val > INT_MAX) {
- warnx3("%s: %s", *gargv, strerror(ERANGE));
+ warnx("%s: %s", *gargv, strerror(ERANGE));
rval = 1;
}
*ip = (int)val;
@@ -496,15 +492,15 @@ getnum(intmax_t *ip, uintmax_t *uip, int signedconv)
else
*uip = strtoumax(*gargv, &ep, 0);
if (ep == *gargv) {
- warnx2("%s: expected numeric value", *gargv, NULL);
+ warnx("%s: expected numeric value", *gargv);
rval = 1;
}
else if (*ep != '\0') {
- warnx2("%s: not completely converted", *gargv, NULL);
+ warnx("%s: not completely converted", *gargv);
rval = 1;
}
if (errno == ERANGE) {
- warnx3("%s: %s", *gargv, strerror(ERANGE));
+ warnx("%s: %s", *gargv, strerror(ERANGE));
rval = 1;
}
++gargv;
@@ -532,14 +528,14 @@ getfloating(long double *dp, int mod_ldbl)
else
*dp = strtod(*gargv, &ep);
if (ep == *gargv) {
- warnx2("%s: expected numeric value", *gargv, NULL);
+ warnx("%s: expected numeric value", *gargv);
rval = 1;
} else if (*ep != '\0') {
- warnx2("%s: not completely converted", *gargv, NULL);
+ warnx("%s: not completely converted", *gargv);
rval = 1;
}
if (errno == ERANGE) {
- warnx3("%s: %s", *gargv, strerror(ERANGE));
+ warnx("%s: %s", *gargv, strerror(ERANGE));
rval = 1;
}
++gargv;
OpenPOWER on IntegriCloud