[#38121] regex performace tuning and ABI compatibility — Yukihiro Matsumoto <matz@...>

まつもと ゆきひろです

13 messages 2009/03/03

[#38191] big time — Tanaka Akira <akr@...>

思い立って、time_t を越える範囲を Time で扱うことに挑戦して

31 messages 2009/03/27
[#38194] Re: big time — Tadayoshi Funaba <tadf@...> 2009/03/28

> 思い立って、time_t を越える範囲を Time で扱うことに挑戦して

[#38196] Re: big time — Tanaka Akira <akr@...> 2009/03/28

In article <20090328.134401.209982445.tadf@dotrb.org>,

[#38202] Re: big time — Urabe Shyouhei <shyouhei@...> 2009/03/29

卜部です。

[#38205] Re: big time — Tanaka Akira <akr@...> 2009/03/29

In article <49CF6641.7010204@ruby-lang.org>,

[#38218] rinda/eval.rb — Masatoshi SEKI <m_seki@...>

咳といいます。

20 messages 2009/03/30
[#38219] Re: rinda/eval.rb — Tanaka Akira <akr@...> 2009/03/31

In article <F01982B3-FBB5-497F-BA36-38FA250E7D69@mva.biglobe.ne.jp>,

[#38223] Re: rinda/eval.rb — Masatoshi SEKI <m_seki@...> 2009/03/31

咳といいます。

[#38229] Re: rinda/eval.rb — "U.Nakamura" <usa@...> 2009/04/01

こんにちは、なかむら(う)です。

[#38233] Re: rinda/eval.rb — Tanaka Akira <akr@...> 2009/04/01

In article <20090401095853.B00A.C613B076@garbagecollect.jp>,

[#38222] *BSD で fork できない理由 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>

きしもとです

12 messages 2009/03/31

[ruby-dev:38152] [Feature:trunk] DL::Handle.sym (was [Bug #1267] DL::Handle#sym segfaults with nil)

From: Nobuyoshi Nakada <nobu@...>
Date: 2009-03-11 11:26:46 UTC
List: ruby-dev #38152
なかだです。

At Wed, 11 Mar 2009 18:40:15 +0900,
Nobuyoshi Nakada wrote in [ruby-dev:38150]:
> DL::Handle#symにシンボル名としてnilを渡すと代わりにRTLD_NEXTを使
> うようになっていますが、RTLD_NEXTが渡せるのはシンボル名ではなく
> て第一引数のハンドルのほうです。

SEGVするのは問題なのでとりあえずnilの扱いは抜きました。

> ハンドルに該当するのはselfですが、もちろんnilは渡しようができな
> いのでクラスメソッドを定義するのはどうでしょうか。

こちらは改めてfeature requestということで。


Index: ext/dl/handle.c
===================================================================
--- ext/dl/handle.c	(revision 22891)
+++ ext/dl/handle.c	(working copy)
@@ -130,17 +130,11 @@ rb_dlhandle_to_i(VALUE self)
 }
 
+static VALUE dlhandle_sym(void *handle, const char *symbol);
+
 VALUE
 rb_dlhandle_sym(VALUE self, VALUE sym)
 {
-    void (*func)();
     struct dl_handle *dlhandle;
-    void *handle;
     const char *name;
-#if defined(HAVE_DLERROR)
-    const char *err;
-# define CHECK_DLERROR if( err = dlerror() ){ func = 0; }
-#else
-# define CHECK_DLERROR
-#endif
 
     rb_secure(2);
@@ -152,7 +146,31 @@ rb_dlhandle_sym(VALUE self, VALUE sym)
 	rb_raise(rb_eDLError, "closed handle");
     }
-    handle = dlhandle->ptr;
 
-    func = dlsym(handle, name);
+    return dlhandle_sym(dlhandle->ptr, StringValuePtr(sym));
+}
+
+VALUE
+rb_dlhandle_s_sym(VALUE self, VALUE sym)
+{
+#ifdef RTLD_NEXT
+    void *handle = RTLD_NEXT;
+#else
+    void *handle = NULL;
+#endif
+    rb_secure(2);
+    return dlhandle_sym(handle, StringValuePtr(sym));
+}
+
+static VALUE
+dlhandle_sym(void *handle, const char *name)
+{
+#if defined(HAVE_DLERROR)
+    const char *err;
+# define CHECK_DLERROR if( err = dlerror() ){ func = 0; }
+#else
+# define CHECK_DLERROR
+#endif
+    void (*func)() = dlsym(handle, name);
+
     CHECK_DLERROR;
 #if defined(FUNC_STDCALL)
@@ -209,4 +227,6 @@ Init_dlhandle(void)
     rb_cDLHandle = rb_define_class_under(rb_mDL, "Handle", rb_cObject);
     rb_define_alloc_func(rb_cDLHandle, rb_dlhandle_s_allocate);
+    rb_define_singleton_method(rb_cDLHandle, "sym", rb_dlhandle_s_sym, 1);
+    rb_define_singleton_method(rb_cDLHandle, "[]", rb_dlhandle_s_sym,  1);
     rb_define_method(rb_cDLHandle, "initialize", rb_dlhandle_initialize, -1);
     rb_define_method(rb_cDLHandle, "to_i", rb_dlhandle_to_i, 0);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next