Module: wine Branch: master Commit: c144859b13e5f14abdc67cd332ee315eacb041ef URL: http://source.winehq.org/git/wine.git/?a=commit;h=c144859b13e5f14abdc67cd332...
Author: Piotr Caban piotr.caban@gmail.com Date: Thu Jun 4 22:36:27 2009 +0200
jscript: Fix DateConstr_value (with no argument) implementation.
---
dlls/jscript/date.c | 16 +++++++++++++--- 1 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c index 53ff314..5f8974b 100644 --- a/dlls/jscript/date.c +++ b/dlls/jscript/date.c @@ -25,11 +25,16 @@
WINE_DEFAULT_DEBUG_CHANNEL(jscript);
+/* 1601 to 1970 is 369 years plus 89 leap days */ +#define TIME_EPOCH ((ULONGLONG)(369 * 365 + 89) * 86400 * 1000) + typedef struct { DispatchEx dispex;
/* ECMA-262 3rd Edition 15.9.1.1 */ DOUBLE time; + + LONG bias; } DateInstance;
static const WCHAR toStringW[] = {'t','o','S','t','r','i','n','g',0}; @@ -474,6 +479,9 @@ static HRESULT create_date(script_ctx_t *ctx, BOOL use_constr, DOUBLE time, Disp { DateInstance *date; HRESULT hres; + TIME_ZONE_INFORMATION tzi; + + GetTimeZoneInformation(&tzi);
date = heap_alloc_zero(sizeof(DateInstance)); if(!date) @@ -489,6 +497,7 @@ static HRESULT create_date(script_ctx_t *ctx, BOOL use_constr, DOUBLE time, Disp }
date->time = time; + date->bias = tzi.Bias;
*ret = &date->dispex; return S_OK; @@ -508,12 +517,13 @@ static HRESULT DateConstr_value(DispatchEx *dispex, LCID lcid, WORD flags, DISPP /* ECMA-262 3rd Edition 15.9.3.3 */ case 0: { FILETIME time; + LONGLONG lltime;
GetSystemTimeAsFileTime(&time); + lltime = ((LONGLONG)time.dwHighDateTime<<32) + + time.dwLowDateTime;
- hres = create_date(dispex->ctx, TRUE, - floor((DOUBLE)(time.dwLowDateTime/1e6) + (DOUBLE)time.dwHighDateTime*((DOUBLE)UINT_MAX+1.0)/1.e6), - &date); + hres = create_date(dispex->ctx, TRUE, lltime/10000-TIME_EPOCH, &date); if(FAILED(hres)) return hres; break;