From 6c7c19e4378b9b9640dc0b250d09264f5cd99572 Mon Sep 17 00:00:00 2001 From: dzwdz Date: Thu, 15 Sep 2022 22:43:39 +0200 Subject: shared/printf: string precision --- src/shared/printf.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/shared') diff --git a/src/shared/printf.c b/src/shared/printf.c index 9ab4606..a9cd355 100644 --- a/src/shared/printf.c +++ b/src/shared/printf.c @@ -131,7 +131,11 @@ int __printf_internal(const char *fmt, va_list argp, if (c == '.') { c = *fmt++; - while ('0' <= c && c <= '9') { + if (c == '*') { + // TODO handle negative precision + m.precision = va_arg(argp, int); + c = *fmt++; + } else while ('0' <= c && c <= '9') { m.precision *= 10; m.precision += c - '0'; c = *fmt++; @@ -166,6 +170,8 @@ int __printf_internal(const char *fmt, va_list argp, const char *s = va_arg(argp, char*); if (s == NULL) s = "(null)"; len = strlen(s); + if (len > m.precision && m.precision != 0) + len = m.precision; pad(&os, &m, len); output(&os, s, len); break; -- cgit v1.2.3