diff --git a/libc/fmt/palandprintf.c b/libc/fmt/palandprintf.c index 4e6eec66..002b1f02 100644 --- a/libc/fmt/palandprintf.c +++ b/libc/fmt/palandprintf.c @@ -121,6 +121,7 @@ static int ppatoi(const char **str) { hidden int palandprintf(void *fn, void *arg, const char *format, va_list va) { void *p; char qchar; + bool longdouble; long double ldbl; wchar_t charbuf[1]; const char *alphabet; @@ -209,6 +210,7 @@ hidden int palandprintf(void *fn, void *arg, const char *format, va_list va) { /* evaluate length field */ signbit = 31; + longdouble = false; switch (*format) { case 'j': /* intmax_t */ format++; @@ -224,10 +226,13 @@ hidden int palandprintf(void *fn, void *arg, const char *format, va_list va) { case 't': /* ptrdiff_t */ case 'z': /* size_t */ case 'Z': /* size_t */ - case 'L': /* long double */ format++; signbit = 63; break; + case 'L': /* long double */ + format++; + longdouble = true; + break; case 'h': format++; if (*format == 'h') { @@ -280,7 +285,7 @@ hidden int palandprintf(void *fn, void *arg, const char *format, va_list va) { case 'f': case 'F': - if (signbit == 63) { + if (longdouble) { ldbl = va_arg(va, long double); } else { ldbl = va_arg(va, double); diff --git a/test/libc/fmt/sprintf_s.inc b/test/libc/fmt/sprintf_s.inc index e6c1feb0..497892e7 100644 --- a/test/libc/fmt/sprintf_s.inc +++ b/test/libc/fmt/sprintf_s.inc @@ -80,7 +80,7 @@ TEST(SUITE(snprintf), testReprChar16) { } TEST(SUITE(snprintf), testReprChar32) { - EXPECT_STREQ("L'♥'", Format("%`'Lc", L'♥')); + EXPECT_STREQ("L'♥'", Format("%`'lc", L'♥')); } TEST(SUITE(snprintf), testReprUtf8) {