Jeff Smith : ucrtbase: Use correct type for year with strftime format %g.

Alexandre Julliard julliard at winehq.org
Wed Nov 27 16:32:29 CST 2019


Module: wine
Branch: master
Commit: cdcbb9f369ff5e83437fd45c39618f6771c81d27
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=cdcbb9f369ff5e83437fd45c39618f6771c81d27

Author: Jeff Smith <whydoubt at gmail.com>
Date:   Wed Nov 27 17:52:25 2019 +0100

ucrtbase: Use correct type for year with strftime format %g.

Signed-off-by: Jeff Smith <whydoubt at gmail.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/time.c         | 16 ++++++++++------
 dlls/ucrtbase/tests/misc.c |  8 ++++----
 2 files changed, 14 insertions(+), 10 deletions(-)

diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index 592b049107..339914b6b3 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -1325,20 +1325,24 @@ static MSVCRT_size_t strftime_impl(STRFTIME_CHAR *str, MSVCRT_size_t max,
             break;
         case 'g':
         case 'G':
-            tmp = year;
+        {
+            int iso_year = year;
+            if(!MSVCRT_CHECK_PMT(year>=0 && year<=9999))
+                goto einval_error;
             if (mstm->tm_yday - (mstm->tm_wday ? mstm->tm_wday : 7) + 4 < 0)
-                tmp--;
-            else if(mstm->tm_yday - (mstm->tm_wday ? mstm->tm_wday : 7) + 5 > 365 + IsLeapYear(tmp))
-                tmp++;
+                iso_year--;
+            else if(mstm->tm_yday - (mstm->tm_wday ? mstm->tm_wday : 7) + 5 > 365 + IsLeapYear(iso_year))
+                iso_year++;
             if(*format == 'G')
             {
-                if (!strftime_int(str, &ret, max, tmp, 4, 0, 9999))
+                if (!strftime_int(str, &ret, max, iso_year, 4, 0, 9999))
                      return 0;
             } else {
-                if (!strftime_int(str, &ret, max, tmp%100, 2, 0, 99))
+                if (!strftime_int(str, &ret, max, iso_year%100, 2, 0, 99))
                      return 0;
             }
             break;
+        }
 #endif
         case 'H':
             if(!strftime_int(str, &ret, max, mstm->tm_hour, alternate ? 0 : 2, 0, 23))
diff --git a/dlls/ucrtbase/tests/misc.c b/dlls/ucrtbase/tests/misc.c
index 9b43d73559..107bb7e84c 100644
--- a/dlls/ucrtbase/tests/misc.c
+++ b/dlls/ucrtbase/tests/misc.c
@@ -977,8 +977,8 @@ static void test_strftime(void)
         {"%r", "12:00:00 AM", { 0, 0, 0, 1, 0, 70, 4, 0, 0 }, TRUE, TRUE},
         {"%r", "02:00:00 PM", { 0, 0, 14, 1, 0, 121, 6, 0, 0 }, TRUE, TRUE},
         {"%t", "\t", { 0, 0, 0, 1, 0, 70, 4, 0, 0 }},
-        {"%g", "", { 0, 0, 0, 1, 0, -1901, 4, 0, 0 }, TRUE},
-        {"%g", "", { 0, 0, 0, 1, 0, -1901, 3, 364, 0 }, TRUE, TRUE},
+        {"%g", "", { 0, 0, 0, 1, 0, -1901, 4, 0, 0 }},
+        {"%g", "", { 0, 0, 0, 1, 0, -1901, 3, 364, 0 }},
         {"%g", "00", { 0, 0, 0, 1, 0, -1900, 4, 0, 0 }},
         {"%g", "70", { 0, 0, 0, 1, 0, 70, 4, 0, 0 }},
         {"%g", "71", { 0, 0, 0, 2, 0, 72, 0, 1, 0 }},
@@ -986,8 +986,8 @@ static void test_strftime(void)
         {"%g", "16", { 0, 0, 0, 1, 0, 117, 0, 0, 0 }},
         {"%g", "99", { 0, 0, 0, 1, 0, 8099, 4, 0, 0 }},
         {"%g", "00", { 0, 0, 0, 1, 0, 8099, 3, 364, 0 }},
-        {"%g", "", { 0, 0, 0, 1, 0, 8100, 0, 0, 0 }, TRUE, TRUE},
-        {"%g", "", { 0, 0, 0, 1, 0, 8100, 4, 0, 0 }, TRUE, TRUE},
+        {"%g", "", { 0, 0, 0, 1, 0, 8100, 0, 0, 0 }},
+        {"%g", "", { 0, 0, 0, 1, 0, 8100, 4, 0, 0 }},
         {"%G", "1970", { 0, 0, 0, 1, 0, 70, 4, 0, 0 }},
         {"%G", "1971", { 0, 0, 0, 2, 0, 72, 0, 1, 0 }},
         {"%G", "1972", { 0, 0, 0, 3, 0, 72, 1, 2, 0 }},




More information about the wine-cvs mailing list