Fix printf(1) ignores width and precision in %b format.

The precision with the conversion specifier b is specified by POSIX: see
point 7 in the reference documentation.

This corrects previous wrong log in r337440.

Reference: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/printf.html

PR:	229641
Reported by:	Rudolf Cejka
Submitted by:	Garrett D'Amore (illumos)
MFC after:	1 week
This commit is contained in:
Pedro F. Giffuni 2018-08-08 15:25:01 +00:00
parent 94e460157d
commit 702da35288
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=337458

View File

@ -1,6 +1,7 @@
/*-
* SPDX-License-Identifier: BSD-3-Clause
*
* Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
* Copyright 2014 Garrett D'Amore <garrett@damore.org>
* Copyright 2010 Nexenta Systems, Inc. All rights reserved.
* Copyright (c) 1989, 1993
@ -375,16 +376,19 @@ printf_doformat(char *fmt, int *rval)
char *p;
int getout;
p = strdup(getstr());
if (p == NULL) {
/* Convert "b" to "s" for output. */
start[strlen(start) - 1] = 's';
if ((p = strdup(getstr())) == NULL) {
warnx("%s", strerror(ENOMEM));
return (NULL);
}
getout = escape(p, 0, &len);
fputs(p, stdout);
PF(start, p);
/* Restore format for next loop. */
free(p);
if (getout)
return (end_fmt);
exit(*rval);
break;
}
case 'c': {