Jacek Caban : jscript: Get rid of BSTR in date.c.

Alexandre Julliard julliard at winehq.org
Thu Oct 11 15:25:15 CDT 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu Oct 11 12:17:37 2012 +0200

jscript: Get rid of BSTR in date.c.

---

 dlls/jscript/date.c |  101 +++++++++++++++------------------------------------
 1 files changed, 29 insertions(+), 72 deletions(-)

diff --git a/dlls/jscript/date.c b/dlls/jscript/date.c
index 6ce1f46..ebf1454 100644
--- a/dlls/jscript/date.c
+++ b/dlls/jscript/date.c
@@ -22,6 +22,7 @@
 
 #include <limits.h>
 #include <math.h>
+#include <assert.h>
 
 #include "jscript.h"
 
@@ -490,10 +491,10 @@ static inline HRESULT date_to_string(DOUBLE time, BOOL show_offset, int offset,
         LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12 };
 
     BOOL formatAD = TRUE;
-    BSTR week, month;
+    WCHAR week[64], month[64];
     jsstr_t *date_str;
     int len, size, year, day;
-    DWORD lcid_en, week_id, month_id;
+    DWORD lcid_en;
     WCHAR sign = '-';
 
     if(isnan(time)) {
@@ -507,22 +508,11 @@ static inline HRESULT date_to_string(DOUBLE time, BOOL show_offset, int offset,
 
         lcid_en = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
 
-        week_id = week_ids[(int)week_day(time)];
-        size = GetLocaleInfoW(lcid_en, week_id, NULL, 0);
-        week = SysAllocStringLen(NULL, size);
-        if(!week)
-            return E_OUTOFMEMORY;
-        GetLocaleInfoW(lcid_en, week_id, week, size);
+        size = GetLocaleInfoW(lcid_en, week_ids[(int)week_day(time)], week, sizeof(week)/sizeof(*week));
+        assert(size);
         len += size-1;
 
-        month_id = month_ids[(int)month_from_time(time)];
-        size = GetLocaleInfoW(lcid_en, month_id, NULL, 0);
-        month = SysAllocStringLen(NULL, size);
-        if(!month) {
-            SysFreeString(week);
-            return E_OUTOFMEMORY;
-        }
-        GetLocaleInfoW(lcid_en, month_id, month, size);
+        size = GetLocaleInfoW(lcid_en, month_ids[(int)month_from_time(time)], month, sizeof(month)/sizeof(*month));
         len += size-1;
 
         year = year_from_time(time);
@@ -555,11 +545,8 @@ static inline HRESULT date_to_string(DOUBLE time, BOOL show_offset, int offset,
         }
 
         date_str = jsstr_alloc_buf(len);
-        if(!date_str) {
-            SysFreeString(week);
-            SysFreeString(month);
+        if(!date_str)
             return E_OUTOFMEMORY;
-        }
 
         if(!show_offset)
             sprintfW(date_str->str, formatNoOffsetW, week, month, day,
@@ -575,9 +562,6 @@ static inline HRESULT date_to_string(DOUBLE time, BOOL show_offset, int offset,
                     (int)hour_from_time(time), (int)min_from_time(time),
                     (int)sec_from_time(time), year, formatAD?ADW:BCW);
 
-        SysFreeString(week);
-        SysFreeString(month);
-
         *r = jsval_string(date_str);
     }
     return S_OK;
@@ -681,11 +665,11 @@ static inline HRESULT create_utc_string(script_ctx_t *ctx, vdisp_t *jsthis, jsva
         LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12 };
 
     BOOL formatAD = TRUE;
-    BSTR week, month;
+    WCHAR week[64], month[64];
     DateInstance *date;
     jsstr_t *date_str;
     int len, size, year, day;
-    DWORD lcid_en, week_id, month_id;
+    DWORD lcid_en;
 
     if(!(date = date_this(jsthis)))
         return throw_type_error(ctx, JS_E_DATE_EXPECTED, NULL);
@@ -701,22 +685,10 @@ static inline HRESULT create_utc_string(script_ctx_t *ctx, vdisp_t *jsthis, jsva
 
         lcid_en = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
 
-        week_id = week_ids[(int)week_day(date->time)];
-        size = GetLocaleInfoW(lcid_en, week_id, NULL, 0);
-        week = SysAllocStringLen(NULL, size);
-        if(!week)
-            return E_OUTOFMEMORY;
-        GetLocaleInfoW(lcid_en, week_id, week, size);
+        size = GetLocaleInfoW(lcid_en, week_ids[(int)week_day(date->time)], week, sizeof(week)/sizeof(*week));
         len += size-1;
 
-        month_id = month_ids[(int)month_from_time(date->time)];
-        size = GetLocaleInfoW(lcid_en, month_id, NULL, 0);
-        month = SysAllocStringLen(NULL, size);
-        if(!month) {
-            SysFreeString(week);
-            return E_OUTOFMEMORY;
-        }
-        GetLocaleInfoW(lcid_en, month_id, month, size);
+        size = GetLocaleInfoW(lcid_en, month_ids[(int)month_from_time(date->time)], month, sizeof(month)/sizeof(*month));
         len += size-1;
 
         year = year_from_time(date->time);
@@ -791,11 +763,11 @@ static HRESULT dateobj_to_date_string(DateInstance *date, jsval_t *r)
         LOCALE_SABBREVMONTHNAME11, LOCALE_SABBREVMONTHNAME12 };
 
     BOOL formatAD = TRUE;
-    BSTR week, month;
+    WCHAR week[64], month[64];
     jsstr_t *date_str;
     DOUBLE time;
     int len, size, year, day;
-    DWORD lcid_en, week_id, month_id;
+    DWORD lcid_en;
 
     if(isnan(date->time)) {
         if(r)
@@ -810,22 +782,12 @@ static HRESULT dateobj_to_date_string(DateInstance *date, jsval_t *r)
 
         lcid_en = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
 
-        week_id = week_ids[(int)week_day(time)];
-        size = GetLocaleInfoW(lcid_en, week_id, NULL, 0);
-        week = SysAllocStringLen(NULL, size);
-        if(!week)
-            return E_OUTOFMEMORY;
-        GetLocaleInfoW(lcid_en, week_id, week, size);
+        size = GetLocaleInfoW(lcid_en, week_ids[(int)week_day(time)], week, sizeof(week)/sizeof(*week));
+        assert(size);
         len += size-1;
 
-        month_id = month_ids[(int)month_from_time(time)];
-        size = GetLocaleInfoW(lcid_en, month_id, NULL, 0);
-        month = SysAllocStringLen(NULL, size);
-        if(!month) {
-            SysFreeString(week);
-            return E_OUTOFMEMORY;
-        }
-        GetLocaleInfoW(lcid_en, month_id, month, size);
+        size = GetLocaleInfoW(lcid_en, month_ids[(int)month_from_time(time)], month, sizeof(month)/sizeof(*month));
+        assert(size);
         len += size-1;
 
         year = year_from_time(time);
@@ -851,16 +813,10 @@ static HRESULT dateobj_to_date_string(DateInstance *date, jsval_t *r)
         day = date_from_time(time);
 
         date_str = jsstr_alloc_buf(len);
-        if(!date_str) {
-            SysFreeString(week);
-            SysFreeString(month);
+        if(!date_str)
             return E_OUTOFMEMORY;
-        }
         sprintfW(date_str->str, formatAD?formatADW:formatBCW, week, month, day, year);
 
-        SysFreeString(week);
-        SysFreeString(month);
-
         *r = jsval_string(date_str);
     }
     return S_OK;
@@ -2073,9 +2029,8 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) {
         LOCALE_SMONTHNAME1, LOCALE_SDAYNAME7, LOCALE_SDAYNAME1,
         LOCALE_SDAYNAME2, LOCALE_SDAYNAME3, LOCALE_SDAYNAME4,
         LOCALE_SDAYNAME5, LOCALE_SDAYNAME6 };
-    BSTR strings[sizeof(string_ids)/sizeof(DWORD)];
-
-    BSTR parse;
+    WCHAR *strings[sizeof(string_ids)/sizeof(DWORD)];
+    WCHAR *parse;
     int input_len, parse_len = 0, nest_level = 0, i, size;
     int year = 0, month = 0, day = 0, hour = 0, min = 0, sec = 0;
     int ms = 0, offset = 0, hour_adjust = 0;
@@ -2102,7 +2057,7 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) {
         else if(!nest_level) parse_len++;
     }
 
-    parse = SysAllocStringLen(NULL, parse_len);
+    parse = heap_alloc((parse_len+1)*sizeof(WCHAR));
     if(!parse)
         return E_OUTOFMEMORY;
     nest_level = 0;
@@ -2112,6 +2067,7 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) {
         else if(input[i] == ')') nest_level--;
         else if(!nest_level) parse[parse_len++] = toupperW(input[i]);
     }
+    parse[parse_len] = 0;
 
     GetTimeZoneInformation(&tzi);
     di.bias = tzi.Bias;
@@ -2120,15 +2076,16 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) {
     di.daylightDate = tzi.DaylightDate;
     di.daylightBias = tzi.DaylightBias;
 
+    /* FIXME: Cache strings */
     lcid_en = MAKELCID(MAKELANGID(LANG_ENGLISH,SUBLANG_ENGLISH_US),SORT_DEFAULT);
     for(i=0; i<sizeof(string_ids)/sizeof(DWORD); i++) {
         size = GetLocaleInfoW(lcid_en, string_ids[i], NULL, 0);
-        strings[i] = SysAllocStringLen(NULL, size);
+        strings[i] = heap_alloc((size+1)*sizeof(WCHAR));
         if(!strings[i]) {
             i--;
             while(i-- >= 0)
-                SysFreeString(strings[i]);
-            SysFreeString(parse);
+                heap_free(strings[i]);
+            heap_free(parse);
             return E_OUTOFMEMORY;
         }
         GetLocaleInfoW(lcid_en, string_ids[i], strings[i], size);
@@ -2290,7 +2247,7 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) {
                 size -= i;
 
                 for(j=0; j<sizeof(string_ids)/sizeof(DWORD); j++)
-                    if(!memicmpW(&parse[i], strings[j], size)) break;
+                    if(!strncmpiW(&parse[i], strings[j], size)) break;
 
                 if(j < 12) {
                     if(set_month) break;
@@ -2323,8 +2280,8 @@ static inline HRESULT date_parse(jsstr_t *input_str, double *ret) {
     }
 
     for(i=0; i<sizeof(string_ids)/sizeof(DWORD); i++)
-        SysFreeString(strings[i]);
-    SysFreeString(parse);
+        heap_free(strings[i]);
+    heap_free(parse);
 
     return S_OK;
 }




More information about the wine-cvs mailing list