|
|
# --- SDE-COPYRIGHT-NOTE-BEGIN --- # This copyright note is auto-generated by ./scripts/Create-CopyPatch. # # Filename: package/.../musl/0006-fix-padding-string-formats-to-width-in-wide-printf-v.patch # Copyright (C) 2016 The OpenSDE Project # # More information can be found in the files COPYING and README. # # This patch file is dual-licensed. It is available under the license the # patched project is licensed under, as long as it is an OpenSource license # as defined at http://www.opensource.org/ (e.g. BSD, X11) or under the terms # of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # --- SDE-COPYRIGHT-NOTE-END ---
From 4aac019a0efd59011a48d031ad046c934c7e8365 Mon Sep 17 00:00:00 2001 From: Rich Felker <dalias@aerifal.cx> Date: Wed, 16 Mar 2016 16:35:22 -0400 Subject: [PATCH] fix padding string formats to width in wide printf variants
the idiom fprintf(f, "%.*s", n, "") was wrongly used in vfwprintf as a means of producing n spaces; instead it produces no output. the correct form is fprintf(f, "%*s", n, ""), using width instead of precision, since for %s the later is a maximum rather than a minimum. ---
src/stdio/vfwprintf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/stdio/vfwprintf.c b/src/stdio/vfwprintf.c
index f06d5ae..f9f1ecf 100644
--- a/src/stdio/vfwprintf.c
+++ b/src/stdio/vfwprintf.c
@@ -288,9 +288,9 @@ static int wprintf_core(FILE *f, const wchar_t *fmt, va_list *ap, union arg *nl_
z = wmemchr(a, 0, p); if (z) p=z-a; if (w<p) w=p; - if (!(fl&LEFT_ADJ)) fprintf(f, "%.*s", w-p, "");
+ if (!(fl&LEFT_ADJ)) fprintf(f, "%*s", w-p, "");
out(f, a, p); - if ((fl&LEFT_ADJ)) fprintf(f, "%.*s", w-p, "");
+ if ((fl&LEFT_ADJ)) fprintf(f, "%*s", w-p, "");
l=w; continue; case 'm': @@ -303,14 +303,14 @@ static int wprintf_core(FILE *f, const wchar_t *fmt, va_list *ap, union arg *nl_
if (i<0) return -1; p=l; if (w<p) w=p; - if (!(fl&LEFT_ADJ)) fprintf(f, "%.*s", w-p, "");
+ if (!(fl&LEFT_ADJ)) fprintf(f, "%*s", w-p, "");
bs = arg.p; while (l--) { i=mbtowc(&wc, bs, MB_LEN_MAX); bs+=i; fputwc(wc, f); } - if ((fl&LEFT_ADJ)) fprintf(f, "%.*s", w-p, "");
+ if ((fl&LEFT_ADJ)) fprintf(f, "%*s", w-p, "");
l=w; continue; } --
2.7.4
|