From f3afff08de803be44d06fc1e98b7c57a79d90d92 Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Fri, 19 Dec 2025 17:54:40 -0700 Subject: [PATCH 1/2] Adjust ftell for write buffer --- src/header/stdio/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/header/stdio/mod.rs b/src/header/stdio/mod.rs index 7e7c37ff90..8470c59887 100644 --- a/src/header/stdio/mod.rs +++ b/src/header/stdio/mod.rs @@ -784,7 +784,9 @@ pub unsafe extern "C" fn ftell_locked(stream: &mut FILE) -> off_t { return -1; } + // Adjust for read buffer, ungetc, and write buffer pos - (stream.read_size - stream.read_pos) as off_t - stream.unget.len() as off_t + + stream.writer.pending() as off_t } /// See . From fbf280c3d7ee6ee65c3e2a4cb6545722b014bd9a Mon Sep 17 00:00:00 2001 From: Jeremy Soller Date: Wed, 24 Dec 2025 20:32:54 -0700 Subject: [PATCH 2/2] Fix padding of infinite float --- src/header/stdio/printf.rs | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/header/stdio/printf.rs b/src/header/stdio/printf.rs index b5f313ac7b..d2d49bd47f 100644 --- a/src/header/stdio/printf.rs +++ b/src/header/stdio/printf.rs @@ -444,12 +444,15 @@ fn fmt_float_normal( } /// Write ±infinity or ±NaN representation for any floating-point style -fn fmt_float_nonfinite(w: &mut W, float: c_double, case: FmtCase) -> io::Result<()> { - if float.is_sign_negative() { - w.write_all(&[b'-'])?; - } - - let nonfinite_str = match float.classify() { +fn fmt_float_nonfinite( + w: &mut W, + float: c_double, + case: FmtCase, + left: bool, + pad_space: usize, + pad_zero: usize, +) -> io::Result<()> { + let string = match float.classify() { FpCategory::Infinite => match case { FmtCase::Lower => INF_STR_LOWER, FmtCase::Upper => INF_STR_UPPER, @@ -460,11 +463,17 @@ fn fmt_float_nonfinite(w: &mut W, float: c_double, case: FmtCase) -> i }, _ => { // This function should only be called with infinite or NaN value. - panic!("this should not be possible") + panic!("fmt_float_nonfinite called with finite float") } }; - w.write_all(nonfinite_str.as_bytes())?; + // Infinity is always padded with spaces, rather than zeroes + pad(w, !left, b' ', string.len()..pad_space + pad_zero)?; + if float.is_sign_negative() { + w.write_all(&[b'-'])?; + } + w.write_all(string.as_bytes())?; + pad(w, left, b' ', string.len()..pad_space + pad_zero)?; Ok(()) } @@ -851,7 +860,7 @@ pub(crate) unsafe fn inner_printf( w, fmt, false, precision, float, exp, left, pad_space, pad_zero, )?; } else { - fmt_float_nonfinite(w, float, fmtcase.unwrap())?; + fmt_float_nonfinite(w, float, fmtcase.unwrap(), left, pad_space, pad_zero)?; } } FmtKind::Decimal => { @@ -864,7 +873,7 @@ pub(crate) unsafe fn inner_printf( fmt_float_normal(w, false, precision, float, left, pad_space, pad_zero)?; } else { - fmt_float_nonfinite(w, float, fmtcase.unwrap())?; + fmt_float_nonfinite(w, float, fmtcase.unwrap(), left, pad_space, pad_zero)?; } } FmtKind::AnyNotation => { @@ -896,7 +905,7 @@ pub(crate) unsafe fn inner_printf( fmt_float_normal(w, true, precision, float, left, pad_space, pad_zero)?; } } else { - fmt_float_nonfinite(w, float, fmtcase.unwrap())?; + fmt_float_nonfinite(w, float, fmtcase.unwrap(), left, pad_space, pad_zero)?; } } FmtKind::String => {