Explorar o código

Merge branch 'gmtime-yday-fix' into 'master'

Simplify gmtime_r() day-of-year calculation, correct comment

See merge request redox-os/relibc!311
Jeremy Soller %!s(int64=4) %!d(string=hai) anos
pai
achega
075fd5be62
Modificáronse 1 ficheiros con 7 adicións e 9 borrados
  1. 7 9
      src/header/time/mod.rs

+ 7 - 9
src/header/time/mod.rs

@@ -301,15 +301,13 @@ pub unsafe extern "C" fn gmtime_r(clock: *const time_t, result: *mut tm) -> *mut
              * 1900) */
             let is_leap_year: bool = year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
 
-            /* For dates that are March 1 or later, we can use day-of-
-             * year in the transformed calendar. For January and
-             * February, that value is sensitive to whether the previous
-             * year is a leap year. Therefore, we use the already
-             * computed date for those two months. */
-            let yday: c_int = match month {
-                0 => mday - 1,      // January
-                1 => 31 + mday - 1, // February
-                _ => day_of_year_transformed + if is_leap_year { 60 } else { 59 },
+            /* For dates in January or February, we use the fact that
+             * January 1 is always 306 days after March 1 in the
+             * previous year. */
+            let yday: c_int = if month < 2 {
+                day_of_year_transformed - 306
+            } else {
+                day_of_year_transformed + if is_leap_year { 60 } else { 59 }
             };
 
             let hour: c_int = (secs_of_day / (60 * 60)).try_into().unwrap();