diff --git a/7.3.013 b/7.3.013 new file mode 100644 index 0000000..489aa0e --- /dev/null +++ b/7.3.013 @@ -0,0 +1,208 @@ +To: vim-dev@vim.org +Subject: Patch 7.3.013 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.013 +Problem: Dynamic loading with Ruby doesn't work for 1.9.2. +Solution: Handle rb_str2cstr differently. Also support dynamic loading on + Unix. (Jon Maken) +Files: src/if_ruby.c + + +*** ../vim-7.3.012/src/if_ruby.c 2010-08-15 21:57:25.000000000 +0200 +--- src/if_ruby.c 2010-09-29 12:49:50.000000000 +0200 +*************** +*** 4,9 **** +--- 4,10 ---- + * + * Ruby interface by Shugo Maeda + * with improvements by SegPhault (Ryan Paul) ++ * with improvements by Jon Maken + * + * Do ":help uganda" in Vim to read copying and usage conditions. + * Do ":help credits" in Vim to see a list of people who contributed. +*************** +*** 26,37 **** + # define RUBYEXTERN extern + #endif + + /* + * This is tricky. In ruby.h there is (inline) function rb_class_of() + * definition. This function use these variables. But we want function to + * use dll_* variables. + */ +- #ifdef DYNAMIC_RUBY + # define rb_cFalseClass (*dll_rb_cFalseClass) + # define rb_cFixnum (*dll_rb_cFixnum) + # define rb_cNilClass (*dll_rb_cNilClass) +--- 27,38 ---- + # define RUBYEXTERN extern + #endif + ++ #ifdef DYNAMIC_RUBY + /* + * This is tricky. In ruby.h there is (inline) function rb_class_of() + * definition. This function use these variables. But we want function to + * use dll_* variables. + */ + # define rb_cFalseClass (*dll_rb_cFalseClass) + # define rb_cFixnum (*dll_rb_cFixnum) + # define rb_cNilClass (*dll_rb_cNilClass) +*************** +*** 46,53 **** +--- 47,67 ---- + */ + # define RUBY_EXPORT + # endif ++ ++ #if !(defined(WIN32) || defined(_WIN64)) ++ # include ++ # define HANDLE void* ++ # define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL) ++ # define symbol_from_dll dlsym ++ # define close_dll dlclose ++ #else ++ # define load_dll LoadLibrary ++ # define symbol_from_dll GetProcAddress ++ # define close_dll FreeLibrary + #endif + ++ #endif /* ifdef DYNAMIC_RUBY */ ++ + /* suggested by Ariya Mizutani */ + #if (_MSC_VER == 1200) + # undef _WIN32_WINNT +*************** +*** 166,172 **** + #define rb_obj_as_string dll_rb_obj_as_string + #define rb_obj_id dll_rb_obj_id + #define rb_raise dll_rb_raise +- #define rb_str2cstr dll_rb_str2cstr + #define rb_str_cat dll_rb_str_cat + #define rb_str_concat dll_rb_str_concat + #define rb_str_new dll_rb_str_new +--- 180,185 ---- +*************** +*** 178,187 **** +--- 191,203 ---- + # define rb_str_new2 dll_rb_str_new2 + #endif + #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 ++ # define rb_string_value dll_rb_string_value + # define rb_string_value_ptr dll_rb_string_value_ptr + # define rb_float_new dll_rb_float_new + # define rb_ary_new dll_rb_ary_new + # define rb_ary_push dll_rb_ary_push ++ #else ++ # define rb_str2cstr dll_rb_str2cstr + #endif + #ifdef RUBY19_OR_LATER + # define rb_errinfo dll_rb_errinfo +*************** +*** 246,252 **** +--- 262,272 ---- + static VALUE (*dll_rb_obj_as_string) (VALUE); + static VALUE (*dll_rb_obj_id) (VALUE); + static void (*dll_rb_raise) (VALUE, const char*, ...); ++ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 ++ static VALUE (*dll_rb_string_value) (volatile VALUE*); ++ #else + static char *(*dll_rb_str2cstr) (VALUE,int*); ++ #endif + static VALUE (*dll_rb_str_cat) (VALUE, const char*, long); + static VALUE (*dll_rb_str_concat) (VALUE, VALUE); + static VALUE (*dll_rb_str_new) (const char*, long); +*************** +*** 347,353 **** +--- 367,377 ---- + {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string}, + {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id}, + {"rb_raise", (RUBY_PROC*)&dll_rb_raise}, ++ #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 ++ {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value}, ++ #else + {"rb_str2cstr", (RUBY_PROC*)&dll_rb_str2cstr}, ++ #endif + {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat}, + {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat}, + {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new}, +*************** +*** 399,405 **** + { + if (hinstRuby) + { +! FreeLibrary(hinstRuby); + hinstRuby = 0; + } + } +--- 423,429 ---- + { + if (hinstRuby) + { +! close_dll(hinstRuby); + hinstRuby = 0; + } + } +*************** +*** 416,422 **** + + if (hinstRuby) + return OK; +! hinstRuby = LoadLibrary(libname); + if (!hinstRuby) + { + if (verbose) +--- 440,446 ---- + + if (hinstRuby) + return OK; +! hinstRuby = load_dll(libname); + if (!hinstRuby) + { + if (verbose) +*************** +*** 426,435 **** + + for (i = 0; ruby_funcname_table[i].ptr; ++i) + { +! if (!(*ruby_funcname_table[i].ptr = GetProcAddress(hinstRuby, + ruby_funcname_table[i].name))) + { +! FreeLibrary(hinstRuby); + hinstRuby = 0; + if (verbose) + EMSG2(_(e_loadfunc), ruby_funcname_table[i].name); +--- 450,459 ---- + + for (i = 0; ruby_funcname_table[i].ptr; ++i) + { +! if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby, + ruby_funcname_table[i].name))) + { +! close_dll(hinstRuby); + hinstRuby = 0; + if (verbose) + EMSG2(_(e_loadfunc), ruby_funcname_table[i].name); +*** ../vim-7.3.012/src/version.c 2010-09-29 12:37:53.000000000 +0200 +--- src/version.c 2010-09-29 13:00:42.000000000 +0200 +*************** +*** 716,717 **** +--- 716,719 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 13, + /**/ + +-- +hundred-and-one symptoms of being an internet addict: +223. You set up a web-cam as your home's security system. + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ download, build and distribute -- http://www.A-A-P.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org ///