From 8ef64676fe09b1c37f510a8f6e875b0d69016bf6 Mon Sep 17 00:00:00 2001
From: Peter Limkilde Svendsen <peter.limkilde@gmail.com>
Date: Tue, 8 Sep 2020 20:31:00 +0200
Subject: [PATCH] Use stricter/simpler type handling

---
 src/header/time/mod.rs | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/header/time/mod.rs b/src/header/time/mod.rs
index d77402f4..114c7f8c 100644
--- a/src/header/time/mod.rs
+++ b/src/header/time/mod.rs
@@ -128,20 +128,22 @@ pub unsafe extern "C" fn asctime_r(tm: *const tm, buf: *mut c_char) -> *mut c_ch
     );
     assert!(0 <= tm_wday && tm_wday <= 6, OUT_OF_RANGE_MESSAGE);
 
-    let result = core::fmt::write(
-        &mut platform::UnsafeStringWriter(buf as *mut u8),
+    // At this point, we can safely use the values as given.
+    let write_result = core::fmt::write(
+        // buf may be either `*mut u8` or `*mut i8`
+        &mut platform::UnsafeStringWriter(buf.cast()),
         format_args!(
             "{:.3} {:.3}{:3} {:02}:{:02}:{:02} {}\n",
-            DAY_NAMES[tm_wday as usize],
-            MON_NAMES[tm_mon as usize],
-            tm_mday as usize,
-            tm_hour as usize,
-            tm_min as usize,
-            tm_sec as usize,
-            (1900 + tm_year)
+            DAY_NAMES[usize::try_from(tm_wday).unwrap()],
+            MON_NAMES[usize::try_from(tm_mon).unwrap()],
+            tm_mday,
+            tm_hour,
+            tm_min,
+            tm_sec,
+            1900 + tm_year
         ),
     );
-    match result {
+    match write_result {
         Ok(_) => buf,
         Err(_) => {
             platform::errno = EIO;
-- 
GitLab