Daniel Lehman : oleaut32: Treat years 0 to 29 as 2000 to 2029 in VARIANT_RollUdate.
Alexandre Julliard
julliard at winehq.org
Thu Apr 19 13:27:52 CDT 2012
Module: wine
Branch: master
Commit: cc37abb6589a1aa9862624c77a45b32c9a36dca1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=cc37abb6589a1aa9862624c77a45b32c9a36dca1
Author: Daniel Lehman <dlehman at esri.com>
Date: Wed Apr 18 13:01:56 2012 -0700
oleaut32: Treat years 0 to 29 as 2000 to 2029 in VARIANT_RollUdate.
---
dlls/oleaut32/tests/vartest.c | 5 ++++-
dlls/oleaut32/variant.c | 7 +++++--
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/dlls/oleaut32/tests/vartest.c b/dlls/oleaut32/tests/vartest.c
index a79481a..770ea5f 100644
--- a/dlls/oleaut32/tests/vartest.c
+++ b/dlls/oleaut32/tests/vartest.c
@@ -1742,7 +1742,10 @@ static void test_SystemTimeToVariantTime(void)
ST2DT(2,1,1980,0,0,0,0,TRUE,29222.0);
ST2DT(0,1,1980,0,0,0,0,TRUE,29220.0); /* Rolls back to 31 Dec 1899 */
ST2DT(1,13,1980,0,0,0,0,FALSE,29587.0); /* Fails on invalid month */
- ST2DT(31,12,90,0,0,0,0,TRUE,33238.0); /* year < 100 is 1900+year! */
+ ST2DT(31,12,90,0,0,0,0,TRUE,33238.0); /* 30 <= year < 100 is 1900+year */
+ ST2DT(1,1,30,0,0,0,0,TRUE,10959.0); /* 30 <= year < 100 is 1900+year */
+ ST2DT(1,1,29,0,0,0,0,TRUE,47119.0); /* 0 <= year < 30 is 2000+year */
+ ST2DT(1,1,0,0,0,0,0,TRUE,36526.0); /* 0 <= year < 30 is 2000+year */
}
static void test_dt2st(int line, double dt, INT r, WORD d, WORD m, WORD y,
diff --git a/dlls/oleaut32/variant.c b/dlls/oleaut32/variant.c
index 0d1f2cc..2d6e2ce 100644
--- a/dlls/oleaut32/variant.c
+++ b/dlls/oleaut32/variant.c
@@ -1143,8 +1143,11 @@ static HRESULT VARIANT_RollUdate(UDATE *lpUd)
if (iYear > 9999 || iYear < -9999)
return E_INVALIDARG; /* Invalid value */
- /* Years < 100 are treated as 1900 + year */
- if (iYear > 0 && iYear < 100)
+ /* Year 0 to 29 are treated as 2000 + year */
+ if (iYear >= 0 && iYear < 30)
+ iYear += 2000;
+ /* Remaining years < 100 are treated as 1900 + year */
+ else if (iYear >= 30 && iYear < 100)
iYear += 1900;
iMinute += iSecond / 60;
More information about the wine-cvs
mailing list