summaryrefslogtreecommitdiff
path: root/ext/win32ole/win32ole.c
diff options
context:
space:
mode:
authorsuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-06 09:47:39 +0000
committersuke <suke@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-08-06 09:47:39 +0000
commit75d1a6c9fc178a483e52c5638002fb8b1dd8e318 (patch)
treeb81429b72e7257793648ef6745505914907f786b /ext/win32ole/win32ole.c
parentf01485b4ec97d6bbc462f6c7210b2499a97ce398 (diff)
* ext/win32ole/win32ole.c: separate src of WIN32OLERuntimeError
from win32ole.c. * ext/win32ole/win32ole.h: ditto * ext/win32ole/depend: ditto. * ext/win32ole/win32ole_error.c: ditto. * ext/win32ole/win32ole_error.h: ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47080 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/win32ole/win32ole.c')
-rw-r--r--ext/win32ole/win32ole.c81
1 files changed, 2 insertions, 79 deletions
diff --git a/ext/win32ole/win32ole.c b/ext/win32ole/win32ole.c
index 42144489cc..4d9bae3144 100644
--- a/ext/win32ole/win32ole.c
+++ b/ext/win32ole/win32ole.c
@@ -128,7 +128,6 @@ VALUE cWIN32OLE_METHOD;
VALUE cWIN32OLE_PARAM;
VALUE cWIN32OLE_EVENT;
VALUE cWIN32OLE_VARIANT;
-VALUE eWIN32OLERuntimeError;
VALUE cWIN32OLE_PROPERTY;
VALUE cWIN32OLE_RECORD;
@@ -153,7 +152,6 @@ static FNCOCREATEINSTANCEEX *gCoCreateInstanceEx = NULL;
static VALUE com_hash;
static IDispatchVtbl com_vtbl;
static UINT cWIN32OLE_cp = CP_ACP;
-static LCID cWIN32OLE_lcid = LOCALE_SYSTEM_DEFAULT;
static rb_encoding *cWIN32OLE_enc;
static UINT g_cp_to_check = CP_ACP;
static char g_lcid_to_check[8 + 1];
@@ -239,10 +237,8 @@ static void load_conv_function51932(void);
#endif
static UINT ole_init_cp(void);
static char *ole_wc2mb(LPWSTR pw);
-static VALUE ole_hresult2msg(HRESULT hr);
static void ole_freeexceptinfo(EXCEPINFO *pExInfo);
static VALUE ole_excepinfo2msg(EXCEPINFO *pExInfo);
-static void ole_raise(HRESULT hr, VALUE ecs, const char *fmt, ...);
static void ole_initialize(void);
static void ole_msg_loop(void);
static void ole_free(struct oledata *pole);
@@ -1055,46 +1051,6 @@ ole_wc2mb(LPWSTR pw)
return ole_wc2mb_alloc(pw, ole_alloc_str, NULL);
}
-static VALUE
-ole_hresult2msg(HRESULT hr)
-{
- VALUE msg = Qnil;
- char *p_msg = NULL;
- char *term = NULL;
- DWORD dwCount;
-
- char strhr[100];
- sprintf(strhr, " HRESULT error code:0x%08x\n ", (unsigned)hr);
- msg = rb_str_new2(strhr);
- dwCount = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, hr,
- MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US),
- (LPTSTR)&p_msg, 0, NULL);
- if (dwCount == 0) {
- dwCount = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
- FORMAT_MESSAGE_FROM_SYSTEM |
- FORMAT_MESSAGE_IGNORE_INSERTS,
- NULL, hr, cWIN32OLE_lcid,
- (LPTSTR)&p_msg, 0, NULL);
- }
- if (dwCount > 0) {
- term = p_msg + strlen(p_msg);
- while (p_msg < term) {
- term--;
- if (*term == '\r' || *term == '\n')
- *term = '\0';
- else break;
- }
- if (p_msg[0] != '\0') {
- rb_str_cat2(msg, p_msg);
- }
- }
- LocalFree(p_msg);
- return msg;
-}
-
static void
ole_freeexceptinfo(EXCEPINFO *pExInfo)
{
@@ -1145,24 +1101,6 @@ ole_excepinfo2msg(EXCEPINFO *pExInfo)
return error_msg;
}
-static void
-ole_raise(HRESULT hr, VALUE ecs, const char *fmt, ...)
-{
- va_list args;
- VALUE msg;
- VALUE err_msg;
- va_init_list(args, fmt);
- msg = rb_vsprintf(fmt, args);
- va_end(args);
-
- err_msg = ole_hresult2msg(hr);
- if(err_msg != Qnil) {
- rb_str_cat2(msg, "\n");
- rb_str_append(msg, err_msg);
- }
- rb_exc_raise(rb_exc_new_str(ecs, msg));
-}
-
void
ole_uninitialize(void)
{
@@ -9676,6 +9614,7 @@ free_enc2cp(void)
void
Init_win32ole(void)
{
+ cWIN32OLE_lcid = LOCALE_SYSTEM_DEFAULT;
g_ole_initialized_init();
ary_ole_event = rb_ary_new();
rb_gc_register_mark_object(ary_ole_event);
@@ -9972,23 +9911,7 @@ Init_win32ole(void)
rb_define_method(cWIN32OLE_RECORD, "ole_instance_variable_set", folerecord_ole_instance_variable_set, 2);
rb_define_method(cWIN32OLE_RECORD, "inspect", folerecord_inspect, 0);
- /*
- * Document-class: WIN32OLERuntimeError
- *
- * Raised when OLE processing failed.
- *
- * EX:
- *
- * obj = WIN32OLE.new("NonExistProgID")
- *
- * raises the exception:
- *
- * WIN32OLERuntimeError: unknown OLE server: `NonExistProgID'
- * HRESULT error code:0x800401f3
- * Invalid class string
- *
- */
- eWIN32OLERuntimeError = rb_define_class("WIN32OLERuntimeError", rb_eRuntimeError);
+ Init_win32ole_error();
init_enc2cp();
atexit((void (*)(void))free_enc2cp);