ext/win32ole/win32ole.c in win32ole-1.8.8 vs ext/win32ole/win32ole.c in win32ole-1.8.9

- old
+ new

@@ -452,16 +452,16 @@ VALUE v; double msec; double sec; VariantTimeToSystemTime(date, &st); v = rb_funcall(rb_cTime, rb_intern("new"), 6, - RB_INT2FIX(st.wYear), - RB_INT2FIX(st.wMonth), - RB_INT2FIX(st.wDay), - RB_INT2FIX(st.wHour), - RB_INT2FIX(st.wMinute), - RB_INT2FIX(st.wSecond)); + RB_INT2FIX(st.wYear), + RB_INT2FIX(st.wMonth), + RB_INT2FIX(st.wDay), + RB_INT2FIX(st.wHour), + RB_INT2FIX(st.wMinute), + RB_INT2FIX(st.wSecond)); st.wYear = RB_FIX2INT(rb_funcall(v, rb_intern("year"), 0)); st.wMonth = RB_FIX2INT(rb_funcall(v, rb_intern("month"), 0)); st.wDay = RB_FIX2INT(rb_funcall(v, rb_intern("mday"), 0)); st.wHour = RB_FIX2INT(rb_funcall(v, rb_intern("hour"), 0)); st.wMinute = RB_FIX2INT(rb_funcall(v, rb_intern("min"), 0)); @@ -505,10 +505,11 @@ ENC_MACHING_CP(enc, "EUC-TW", 51950); ENC_MACHING_CP(enc, "GB18030", 54936); ENC_MACHING_CP(enc, "GB2312", 20936); ENC_MACHING_CP(enc, "GBK", 936); ENC_MACHING_CP(enc, "IBM437", 437); + ENC_MACHING_CP(enc, "IBM720", 720); ENC_MACHING_CP(enc, "IBM737", 737); ENC_MACHING_CP(enc, "IBM775", 775); ENC_MACHING_CP(enc, "IBM852", 852); ENC_MACHING_CP(enc, "IBM855", 855); ENC_MACHING_CP(enc, "IBM857", 857); @@ -565,20 +566,20 @@ { HRESULT hr = E_NOINTERFACE; void *p; if (!pIMultiLanguage) { #if defined(HAVE_TYPE_IMULTILANGUAGE2) - hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, - &IID_IMultiLanguage2, &p); + hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, + &IID_IMultiLanguage2, &p); #elif defined(HAVE_TYPE_IMULTILANGUAGE) - hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, - &IID_IMultiLanguage, &p); + hr = CoCreateInstance(&CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, + &IID_IMultiLanguage, &p); #endif - if (FAILED(hr)) { - failed_load_conv51932(); - } - pIMultiLanguage = p; + if (FAILED(hr)) { + failed_load_conv51932(); + } + pIMultiLanguage = p; } } #define need_conv_function51932() (load_conv_function51932(), 1) #else #define load_conv_function51932() failed_load_conv51932() @@ -621,11 +622,11 @@ { UINT cp; rb_encoding *encdef; encdef = rb_default_internal_encoding(); if (!encdef) { - encdef = rb_default_external_encoding(); + encdef = rb_default_external_encoding(); } cp = ole_encoding2cp(encdef); set_ole_codepage(cp); return cp; } @@ -647,68 +648,68 @@ VALUE enc_name; char *enc_cstr; int idx; if (!code_page_installed(cp)) { - switch(cp) { - case CP_ACP: - cp = GetACP(); - break; - case CP_OEMCP: - cp = GetOEMCP(); - break; - case CP_MACCP: - case CP_THREAD_ACP: - if (!pGetCPInfoEx) { - pGetCPInfoEx = (BOOL (*)(UINT, DWORD, struct myCPINFOEX *)) - GetProcAddress(GetModuleHandle("kernel32"), "GetCPInfoEx"); - if (!pGetCPInfoEx) { - pGetCPInfoEx = (void*)-1; - } - } - buf = ALLOCA_N(struct myCPINFOEX, 1); - ZeroMemory(buf, sizeof(struct myCPINFOEX)); - if (pGetCPInfoEx == (void*)-1 || !pGetCPInfoEx(cp, 0, buf)) { - rb_raise(eWIN32OLERuntimeError, "cannot map codepage to encoding."); - break; /* never reach here */ - } - cp = buf->CodePage; - break; - case CP_SYMBOL: - case CP_UTF7: - case CP_UTF8: - break; - case 51932: - load_conv_function51932(); - break; - default: + switch(cp) { + case CP_ACP: + cp = GetACP(); + break; + case CP_OEMCP: + cp = GetOEMCP(); + break; + case CP_MACCP: + case CP_THREAD_ACP: + if (!pGetCPInfoEx) { + pGetCPInfoEx = (BOOL (*)(UINT, DWORD, struct myCPINFOEX *)) + GetProcAddress(GetModuleHandle("kernel32"), "GetCPInfoEx"); + if (!pGetCPInfoEx) { + pGetCPInfoEx = (void*)-1; + } + } + buf = ALLOCA_N(struct myCPINFOEX, 1); + ZeroMemory(buf, sizeof(struct myCPINFOEX)); + if (pGetCPInfoEx == (void*)-1 || !pGetCPInfoEx(cp, 0, buf)) { + rb_raise(eWIN32OLERuntimeError, "cannot map codepage to encoding."); + break; /* never reach here */ + } + cp = buf->CodePage; + break; + case CP_SYMBOL: + case CP_UTF7: + case CP_UTF8: + break; + case 51932: + load_conv_function51932(); + break; + default: rb_raise(eWIN32OLERuntimeError, "codepage should be WIN32OLE::CP_ACP, WIN32OLE::CP_OEMCP, WIN32OLE::CP_MACCP, WIN32OLE::CP_THREAD_ACP, WIN32OLE::CP_SYMBOL, WIN32OLE::CP_UTF7, WIN32OLE::CP_UTF8, or installed codepage."); break; } } enc_name = rb_sprintf("CP%d", cp); idx = rb_enc_find_index(enc_cstr = StringValueCStr(enc_name)); if (idx < 0) - idx = rb_define_dummy_encoding(enc_cstr); + idx = rb_define_dummy_encoding(enc_cstr); return rb_enc_from_index(idx); } #ifndef pIMultiLanguage static HRESULT ole_ml_wc2mb_conv0(LPWSTR pw, LPSTR pm, UINT *size) { DWORD dw = 0; return pIMultiLanguage->lpVtbl->ConvertStringFromUnicode(pIMultiLanguage, - &dw, cWIN32OLE_cp, pw, NULL, pm, size); + &dw, cWIN32OLE_cp, pw, NULL, pm, size); } #define ole_ml_wc2mb_conv(pw, pm, size, onfailure) do { \ - HRESULT hr = ole_ml_wc2mb_conv0(pw, pm, &size); \ - if (FAILED(hr)) { \ - onfailure; \ - ole_raise(hr, eWIN32OLERuntimeError, "fail to convert Unicode to CP%d", cWIN32OLE_cp); \ - } \ + HRESULT hr = ole_ml_wc2mb_conv0(pw, pm, &size); \ + if (FAILED(hr)) { \ + onfailure; \ + ole_raise(hr, eWIN32OLERuntimeError, "fail to convert Unicode to CP%d", cWIN32OLE_cp); \ + } \ } while (0) #endif #define ole_wc2mb_conv(pw, pm, size) WideCharToMultiByte(cWIN32OLE_cp, 0, (pw), -1, (pm), (size), NULL, NULL) @@ -717,15 +718,15 @@ { LPSTR pm; UINT size = 0; if (conv_51932(cWIN32OLE_cp)) { #ifndef pIMultiLanguage - ole_ml_wc2mb_conv(pw, NULL, size, {}); - pm = alloc(size, arg); - if (size) ole_ml_wc2mb_conv(pw, pm, size, xfree(pm)); - pm[size] = '\0'; - return pm; + ole_ml_wc2mb_conv(pw, NULL, size, {}); + pm = alloc(size, arg); + if (size) ole_ml_wc2mb_conv(pw, pm, size, xfree(pm)); + pm[size] = '\0'; + return pm; #endif } size = ole_wc2mb_conv(pw, NULL, 0); pm = alloc(size, arg); if (size) ole_wc2mb_conv(pw, pm, size); @@ -813,12 +814,12 @@ ole_initialize(void) { HRESULT hr; if(!g_uninitialize_hooked) { - rb_add_event_hook(ole_uninitialize_hook, RUBY_EVENT_THREAD_END, Qnil); - g_uninitialize_hooked = TRUE; + rb_add_event_hook(ole_uninitialize_hook, RUBY_EVENT_THREAD_END, Qnil); + g_uninitialize_hooked = TRUE; } if(g_ole_initialized == FALSE) { if(g_running_nano) { hr = CoInitializeEx(NULL, COINIT_MULTITHREADED); @@ -908,25 +909,25 @@ UINT size = 0; LPWSTR pw; if (conv_51932(cp)) { #ifndef pIMultiLanguage - DWORD dw = 0; - UINT n = len; - HRESULT hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, - &dw, cp, pm, &n, NULL, &size); - if (FAILED(hr)) { + DWORD dw = 0; + UINT n = len; + HRESULT hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, + &dw, cp, pm, &n, NULL, &size); + if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert CP%d to Unicode", cp); - } - pw = SysAllocStringLen(NULL, size); - n = len; - hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, - &dw, cp, pm, &n, pw, &size); - if (FAILED(hr)) { + } + pw = SysAllocStringLen(NULL, size); + n = len; + hr = pIMultiLanguage->lpVtbl->ConvertStringToUnicode(pIMultiLanguage, + &dw, cp, pm, &n, pw, &size); + if (FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "fail to convert CP%d to Unicode", cp); - } - return pw; + } + return pw; #endif } size = MultiByteToWideChar(cp, 0, pm, len, NULL, 0); pw = SysAllocStringLen(NULL, size); pw[size-1] = 0; @@ -992,11 +993,11 @@ V_UNKNOWN(var) = NULL; } } return; } -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) switch(vt & ~VT_BYREF) { case VT_I8: V_VT(var) = VT_I8; V_I8(var) = NUM2I8 (val); break; @@ -1006,11 +1007,11 @@ break; default: ole_val2variant2(val, var); break; } -#else /* (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) */ +#else /* (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) */ ole_val2variant2(val, var); #endif } VOID * @@ -1060,11 +1061,11 @@ return &V_R4(pvar); break; case VT_R8: return &V_R8(pvar); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) case VT_I8: return &V_I8(pvar); break; case VT_UI8: return &V_UI8(pvar); @@ -1547,14 +1548,14 @@ obj = RB_INT2NUM((long)*V_UINTREF(pvar)); else obj = RB_INT2NUM((long)V_UINT(pvar)); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) case VT_I8: if(V_ISBYREF(pvar)) -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) #ifdef V_I8REF obj = I8_2_NUM(*V_I8REF(pvar)); #endif #else obj = Qnil; @@ -1562,21 +1563,21 @@ else obj = I8_2_NUM(V_I8(pvar)); break; case VT_UI8: if(V_ISBYREF(pvar)) -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) #ifdef V_UI8REF obj = UI8_2_NUM(*V_UI8REF(pvar)); #endif #else obj = Qnil; #endif else obj = UI8_2_NUM(V_UI8(pvar)); break; -#endif /* (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) */ +#endif /* (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) */ case VT_R4: if(V_ISBYREF(pvar)) obj = rb_float_new(*V_R4REF(pvar)); else @@ -1734,15 +1735,15 @@ pbuf = ALLOC_N(char, size + 1); err = RegQueryValueEx(hkey, subkey, NULL, &dwtype, (BYTE *)pbuf, &size); if (err == ERROR_SUCCESS) { pbuf[size] = '\0'; if (dwtype == REG_EXPAND_SZ) { - char* pbuf2 = (char *)pbuf; - DWORD len = ExpandEnvironmentStrings(pbuf2, NULL, 0); - pbuf = ALLOC_N(char, len + 1); - ExpandEnvironmentStrings(pbuf2, pbuf, len + 1); - free(pbuf2); + char* pbuf2 = (char *)pbuf; + DWORD len = ExpandEnvironmentStrings(pbuf2, NULL, 0); + pbuf = ALLOC_N(char, len + 1); + ExpandEnvironmentStrings(pbuf2, pbuf, len + 1); + free(pbuf2); } val = rb_str_new2((char *)pbuf); } free(pbuf); } @@ -2519,16 +2520,16 @@ hr = pIClassFactory2->lpVtbl->CreateInstanceLic(pIClassFactory2, NULL, NULL, &IID_IDispatch, key_buf, &p); SysFreeString(key_buf); OLE_RELEASE(pIClassFactory2); } } - pDispatch = p; if(FAILED(hr)) { ole_raise(hr, eWIN32OLERuntimeError, "failed to create WIN32OLE object from `%s'", StringValuePtr(svr_name)); } + pDispatch = p; ole_set_member(self, pDispatch); return self; } @@ -2552,11 +2553,11 @@ } /* raise an exception */ rb_raise(rb_eTypeError, "wrong argument type (expected String or Symbol)"); } if (RB_TYPE_P(key, T_SYMBOL)) { - key = rb_sym2str(key); + key = rb_sym2str(key); } /* pNamedArgs[0] is <method name>, so "index + 1" */ pOp->pNamedArgs[index + 1] = ole_vstr2wc(key); @@ -2616,23 +2617,23 @@ op.dp.cNamedArgs = 0; op.dp.cArgs = 0; rb_scan_args(argc, argv, "1*", &cmd, &paramS); if(!RB_TYPE_P(cmd, T_STRING) && !RB_TYPE_P(cmd, T_SYMBOL) && !is_bracket) { - rb_raise(rb_eTypeError, "method is wrong type (expected String or Symbol)"); + rb_raise(rb_eTypeError, "method is wrong type (expected String or Symbol)"); } if (RB_TYPE_P(cmd, T_SYMBOL)) { - cmd = rb_sym2str(cmd); + cmd = rb_sym2str(cmd); } pole = oledata_get_struct(self); if(!pole->pDispatch) { rb_raise(rb_eRuntimeError, "failed to get dispatch interface"); } if (is_bracket) { DispID = DISPID_VALUE; argc += 1; - rb_ary_unshift(paramS, cmd); + rb_ary_unshift(paramS, cmd); } else { wcmdname = ole_vstr2wc(cmd); hr = pole->pDispatch->lpVtbl->GetIDsOfNames( pole->pDispatch, &IID_NULL, &wcmdname, 1, lcid, &DispID); SysFreeString(wcmdname); @@ -2649,11 +2650,11 @@ /* if last arg is hash object */ if(RB_TYPE_P(param, T_HASH)) { /*------------------------------------------ hash object ==> named dispatch parameters --------------------------------------------*/ - cNamedArgs = rb_long2int(RHASH_SIZE(param)); + cNamedArgs = rb_long2int((long)RHASH_SIZE(param)); op.dp.cArgs = cNamedArgs + argc - 2; op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1); op.dp.rgvarg = ALLOCA_N(VARIANTARG, op.dp.cArgs); rb_hash_foreach(param, hash2named_arg, (VALUE)&op); @@ -3636,11 +3637,11 @@ method = rb_sym2str(method); } pole = oledata_get_struct(self); wcmdname = ole_vstr2wc(method); hr = pole->pDispatch->lpVtbl->GetIDsOfNames( pole->pDispatch, &IID_NULL, - &wcmdname, 1, cWIN32OLE_lcid, &DispID); + &wcmdname, 1, cWIN32OLE_lcid, &DispID); SysFreeString(wcmdname); return SUCCEEDED(hr) ? Qtrue : Qfalse; } HRESULT @@ -3750,11 +3751,11 @@ typestr = rb_str_new2("UI2"); break; case VT_UI4: typestr = rb_str_new2("UI4"); break; -#if (_MSC_VER >= 1300) || defined(__CYGWIN__) || defined(__MINGW32__) +#if (defined(_MSC_VER) && (_MSC_VER >= 1300)) || defined(__CYGWIN__) || defined(__MINGW32__) case VT_I8: typestr = rb_str_new2("I8"); break; case VT_UI8: typestr = rb_str_new2("UI8"); @@ -3960,9 +3961,10 @@ } RegCloseKey(hsubkey); } } +LCID cWIN32OLE_lcid; void Init_win32ole(void) { cWIN32OLE_lcid = LOCALE_SYSTEM_DEFAULT;