summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Sinclair <dsinclair@chromium.org>2017-06-07 15:41:07 -0400
committerChromium commit bot <commit-bot@chromium.org>2017-06-07 19:59:21 +0000
commit28d676960b32fa996b9a278476c00d63a91386f9 (patch)
tree67a75d67a5db2147cf1c9440beaac0252800b0f2
parenteda6525eaef97a354e52dbe2e7f454129325d36b (diff)
downloadpdfium-28d676960b32fa996b9a278476c00d63a91386f9.tar.xz
Fix some CFGAS_FormatString issues
This CL fixes the solar days calculation for months after August. Simplifies the minute rounding method. Change-Id: I5f335338ecac911ef0ab57602f41bb98c6f9fa6c Reviewed-on: https://pdfium-review.googlesource.com/6331 Commit-Queue: dsinclair <dsinclair@chromium.org> Reviewed-by: Nicolás Peña <npm@chromium.org> Reviewed-by: Lei Zhang <thestig@chromium.org>
-rw-r--r--xfa/fgas/crt/cfgas_formatstring.cpp17
-rw-r--r--xfa/fgas/crt/cfgas_formatstring_unittest.cpp7
2 files changed, 16 insertions, 8 deletions
diff --git a/xfa/fgas/crt/cfgas_formatstring.cpp b/xfa/fgas/crt/cfgas_formatstring.cpp
index 6e2952a7cc..77dfb45941 100644
--- a/xfa/fgas/crt/cfgas_formatstring.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring.cpp
@@ -391,9 +391,9 @@ void ResolveZone(FX_TIMEZONE tzDiff,
(tzLocale.tzHour < 0 ? -tzLocale.tzMinute : tzLocale.tzMinute);
iMinuteDiff -= tzDiff.tzHour * 60 +
(tzDiff.tzHour < 0 ? -tzDiff.tzMinute : tzDiff.tzMinute);
- while (iMinuteDiff > 1440)
- iMinuteDiff -= 1440;
- while (iMinuteDiff < 0)
+
+ iMinuteDiff %= 1440;
+ if (iMinuteDiff < 0)
iMinuteDiff += 1440;
*wHour = iMinuteDiff / 60;
@@ -604,19 +604,20 @@ int32_t GetNumTrailingLimit(const CFX_WideString& wsFormat,
return iTreading;
}
+// |month| is 1-based. e.g. 1 means January.
uint16_t GetSolarMonthDays(uint16_t year, uint16_t month) {
- if (month % 2)
- return 31;
if (month == 2)
return FX_IsLeapYear(year) ? 29 : 28;
- return 30;
+ if (month == 4 || month == 6 || month == 9 || month == 11)
+ return 30;
+ return 31;
}
uint16_t GetWeekDay(uint16_t year, uint16_t month, uint16_t day) {
- uint16_t g_month_day[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
+ static const uint16_t month_day[] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
uint16_t nDays =
(year - 1) % 7 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
- nDays += g_month_day[month - 1] + day;
+ nDays += month_day[month - 1] + day;
if (FX_IsLeapYear(year) && month > 2)
nDays++;
return nDays % 7;
diff --git a/xfa/fgas/crt/cfgas_formatstring_unittest.cpp b/xfa/fgas/crt/cfgas_formatstring_unittest.cpp
index 37fb3e62a4..32bb23b22c 100644
--- a/xfa/fgas/crt/cfgas_formatstring_unittest.cpp
+++ b/xfa/fgas/crt/cfgas_formatstring_unittest.cpp
@@ -80,6 +80,13 @@ TEST_F(CFGAS_FormatStringTest, DateFormat) {
{L"en", L"19990110", L"MMM D, YYYY", L"Jan 10, 1999"},
{L"en", L"19990202", L"J", L"33"},
{L"en", L"19990202", L"JJJ", L"033"},
+ {L"en", L"19991231", L"J", L"365"},
+ {L"en", L"20001231", L"J", L"366"},
+ {L"en", L"19990501", L"J", L"121"},
+ {L"en", L"19990901", L"J", L"244"},
+ {L"en", L"19990228", L"J", L"59"},
+ {L"en", L"20000229", L"J", L"60"},
+ {L"en", L"21000501", L"J", L"121"},
{L"en", L"19990102", L"M", L"1"},
{L"en", L"19990102", L"MMM", L"Jan"},
{L"en", L"19990102", L"YYYY G", L"1999 AD"},