Loading ...
Sorry, an error occurred while loading the content.

Patch 7.3.013

Expand Messages
  • Bram Moolenaar
    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.
    Message 1 of 1 , Sep 29, 2010
    • 0 Attachment
      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 -- Bram@... -- 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
    Your message has been successfully submitted and would be delivered to recipients shortly.