svn commit: r337440 - head/usr.bin/printf
Pedro F. Giffuni
pfg at FreeBSD.org
Tue Aug 7 23:03:52 UTC 2018
Author: pfg
Date: Tue Aug 7 23:03:50 2018
New Revision: 337440
URL: https://svnweb.freebsd.org/changeset/base/337440
Log:
Fix printf(1) ignores width and precision in %b format.
The precision with behavior is "unspecified" by POSIX (as of 2018), but
most implementations seem to have taken it to be treated the same as for
"s"; applied after the unescaping.
Adopt the same treatment on our printf.
PR: 229641
Submitted by: Garrett D'Amore (illumos)
Modified:
head/usr.bin/printf/printf.c
Modified: head/usr.bin/printf/printf.c
==============================================================================
--- head/usr.bin/printf/printf.c Tue Aug 7 22:13:03 2018 (r337439)
+++ head/usr.bin/printf/printf.c Tue Aug 7 23:03:50 2018 (r337440)
@@ -1,6 +1,7 @@
/*-
* SPDX-License-Identifier: BSD-3-Clause
*
+ * Copyright 2018 Staysail Systems, Inc. <info at staysail.tech>
* Copyright 2014 Garrett D'Amore <garrett at 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': {
More information about the svn-src-all
mailing list