Fixed warnx format errors in printf and csh, and snprintf format errors

in sh, by using separate macros for the 1, 2 and 3-arg calls to warnx.
(The 3-arg warnx macro in sh/bltin/bltin.h used to require bogus dummy
args.)
This commit is contained in:
bde 1998-12-07 12:14:04 +00:00
parent 52149e1f7c
commit c586f2866a
2 changed files with 23 additions and 9 deletions

View File

@ -34,7 +34,7 @@
* SUCH DAMAGE.
*
* @(#)bltin.h 8.2 (Berkeley) 5/4/95
* $Id$
* $Id: bltin.h,v 1.8 1997/02/22 13:58:58 peter Exp $
*/
/*
@ -60,7 +60,17 @@
#define fputs outstr
#define fflush flushout
#define INITARGS(argv)
#define warnx(a, b, c) { \
#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); \

View File

@ -56,6 +56,10 @@ static char const sccsid[] = "@(#)printf.c 8.1 (Berkeley) 7/20/93";
#ifdef SHELL
#define main printfcmd
#include "bltin/bltin.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) { \
@ -136,7 +140,7 @@ next: for (start = fmt;; ++fmt) {
if (!*fmt) {
/* avoid infinite loop */
if (end == 1) {
warnx("missing format character",
warnx1("missing format character",
NULL, NULL);
return (1);
}
@ -186,7 +190,7 @@ next: for (start = fmt;; ++fmt) {
} else
precision = 0;
if (!*fmt) {
warnx("missing format character", NULL, NULL);
warnx1("missing format character", NULL, NULL);
return (1);
}
@ -227,7 +231,7 @@ next: for (start = fmt;; ++fmt) {
break;
}
default:
warnx("illegal format character %c", convch, NULL);
warnx2("illegal format character %c", convch, NULL);
return (1);
}
*fmt = nextch;
@ -338,7 +342,7 @@ getint(ip)
if (getlong(&val))
return (1);
if (val > INT_MAX) {
warnx("%s: %s", *gargv, strerror(ERANGE));
warnx3("%s: %s", *gargv, strerror(ERANGE));
return (1);
}
*ip = val;
@ -360,16 +364,16 @@ getlong(lp)
errno = 0;
val = strtol(*gargv, &ep, 0);
if (*ep != '\0') {
warnx("%s: illegal number", *gargv, NULL);
warnx2("%s: illegal number", *gargv, NULL);
return (1);
}
if (errno == ERANGE)
if (val == LONG_MAX) {
warnx("%s: %s", *gargv, strerror(ERANGE));
warnx3("%s: %s", *gargv, strerror(ERANGE));
return (1);
}
if (val == LONG_MIN) {
warnx("%s: %s", *gargv, strerror(ERANGE));
warnx3("%s: %s", *gargv, strerror(ERANGE));
return (1);
}