Piotr Caban : jscript: Fix DateConstr_value (with no argument) implementation.
Alexandre Julliard
julliard at winehq.org
Fri Jun 5 08:56:53 CDT 2009
Module: wine
Branch: master
Commit: c144859b13e5f14abdc67cd332ee315eacb041ef
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c144859b13e5f14abdc67cd332ee315eacb041ef
Author: Piotr Caban <piotr.caban at 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;
More information about the wine-cvs
mailing list