Piotr Caban : jscript: Added Date_toTimeString implementation.

Alexandre Julliard julliard at winehq.org
Mon Jun 29 09:17:47 CDT 2009


Module: wine
Branch: master
Commit: 40b88e261a44ecdc1dffce3901d612924c7c98d0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=40b88e261a44ecdc1dffce3901d612924c7c98d0

Author: Piotr Caban <piotr.caban at gmail.com>
Date:   Sun Jun 28 23:39:32 2009 +0200

jscript: Added Date_toTimeString implementation.

---

 dlls/jscript/date.c |   61 +++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 2 deletions(-)

diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c
index ce703a4..3996b7e 100644
--- a/dlls/jscript/date.c
+++ b/dlls/jscript/date.c
@@ -507,11 +507,68 @@ static HRESULT Date_toDateString(DispatchEx *dispex, LCID lcid, WORD flags, DISP
     return E_NOTIMPL;
 }
 
+/* ECMA-262 3rd Edition    15.9.5.4 */
 static HRESULT Date_toTimeString(DispatchEx *dispex, LCID lcid, WORD flags, DISPPARAMS *dp,
         VARIANT *retv, jsexcept_t *ei, IServiceProvider *caller)
 {
-    FIXME("\n");
-    return E_NOTIMPL;
+    static const WCHAR NaNW[] = { 'N','a','N',0 };
+    static const WCHAR formatW[] = { '%','0','2','d',':','%','0','2','d',':','%','0','2','d',
+        ' ','U','T','C','%','c','%','0','2','d','%','0','2','d',0 };
+    static const WCHAR formatUTCW[] = { '%','0','2','d',':','%','0','2','d',
+        ':','%','0','2','d',' ','U','T','C',0 };
+    DateInstance *date;
+    BSTR date_str;
+    DOUBLE time;
+    WCHAR sign;
+    int offset;
+
+    TRACE("\n");
+
+    if(!is_class(dispex, JSCLASS_DATE)) {
+        FIXME("throw TypeError\n");
+        return E_FAIL;
+    }
+
+    date = (DateInstance*)dispex;
+
+    if(isnan(date->time)) {
+        if(retv) {
+            V_VT(retv) = VT_BSTR;
+            V_BSTR(retv) = SysAllocString(NaNW);
+            if(!V_BSTR(retv))
+                return E_OUTOFMEMORY;
+        }
+        return S_OK;
+    }
+
+    time = local_time(date->time, date);
+
+    if(retv) {
+        date_str = SysAllocStringLen(NULL, 17);
+        if(!date_str)
+            return E_OUTOFMEMORY;
+
+        offset = date->bias +
+            daylight_saving_ta(time, date);
+
+        if(offset < 0) {
+            sign = '+';
+            offset = -offset;
+        }
+        else sign = '-';
+
+        if(offset)
+            sprintfW(date_str, formatW, (int)hour_from_time(time),
+                    (int)min_from_time(time), (int)sec_from_time(time),
+                    sign, offset/60, offset%60);
+        else
+            sprintfW(date_str, formatUTCW, (int)hour_from_time(time),
+                    (int)min_from_time(time), (int)sec_from_time(time));
+
+        V_VT(retv) = VT_BSTR;
+        V_BSTR(retv) = date_str;
+    }
+    return S_OK;
 }
 
 /* ECMA-262 3rd Edition    15.9.5.6 */




More information about the wine-cvs mailing list