aboutsummaryrefslogtreecommitdiffstats
path: root/main/musl/0006-fix-padding-string-formats-to-width-in-wide-printf-v.patch
blob: c80043e8371abbf824eca92e4e91b248e11690cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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