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 <dlfcn.h>
+ # 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 -- [email protected] -- 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    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui