[#21809] lib/test/unit/ui/tk/testrunner.rb — Kazuhiro NISHIYAMA <zn@...>
西山和広です。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
なかだです。
こんにちは、なかむら(う)です。
永井@知能.九工大です.
なかだです。
永井@知能.九工大です.
[#21830] pty on FreeBSD — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#21846] StringIO#path — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#21876] get_last_error or getLastError by DL::Importable — Take_tk <ggb03124@...>
たけ(tk)です。
[#21883] right hand Regexp — Koji Arai <JCA02266@...>
新井です。
[#21899] core dump in rb_hash_aset — Tanaka Akira <akr@...17n.org>
% ruby -e 'h = {}
まつもと ゆきひろです
In article <1068753744.644627.6908.nullmailer@picachu.netlab.jp>,
[#21932] rough / tabs.rb — Minero Aoki <aamine@...>
青木です。
[#21939] StringIO.new("").read — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#21942] Zlib::GzipReader#read — Tanaka Akira <akr@...17n.org>
ふと気がついたのですが、
[#21943] IO#read — Tanaka Akira <akr@...17n.org>
ふと。
In article <87u1523sjj.fsf@serein.a02.aist.go.jp>,
なかだです。
In article <200311250059.hAP0xSYw004490@sharui.nakada.kanuma.tochigi.jp>,
[#21946] Re: [ruby-cvs] ruby, ruby/lib, ruby/test/fileutils: * lib/fileutils.rb (fu_same?): check by inode instead of path name, to detect two hard links pointing to the same content. — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
Siena. です。
青木です。それにしても凄い Subject だ。
[#22000] purge pthread at configure — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22013] HTTP_PROXY — Tanaka Akira <akr@...17n.org>
ふと
[#22025] --enable-pthread on FreeBSD — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
[#22042] ENV["path"].tainted? — Tanaka Akira <akr@...17n.org>
ENV["path"] の値が
まつもと ゆきひろです
In article <1069748137.095435.3356.nullmailer@picachu.netlab.jp>,
斜め読みですが、
まつもと ゆきひろです
In message <1070234162.951847.24883.nullmailer@picachu.netlab.jp>
[#22057] drb/drb.rb document — Minero Aoki <aamine@...>
青木です。
[#22071] Dir.glob と Shjift_JIS について — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>
はじめまして。山本といいます。
Siena. です。
> 山本さんのパッチがうまく当たらず手パッチしたので、念のため何度か
Siena. です。
こんにちは、山本です。
山本です。
山本です。
山本です。
山本です。glob_helperをリファクタリングしてみました。
なかだです。
山本です。
なかだです。
山本です。
Siena. です。
山本です。
山本です。
まつもと ゆきひろです
山本です。
山本です。パッチを送ります。
山本です。
山本です。
山本です。
山本です。
まつもと ゆきひろです
>すいません。パッチを出す時にはいつもどの時点のソースに対する
まつもと ゆきひろです
>|すみません、1.8.1に対してです。
まつもと ゆきひろです
こんにちは、山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。[ruby-dev:22470]にバグがあったので修正しました。
>山本です。[ruby-dev:22470]にバグがあったので修正しました。
まつもと ゆきひろです
山本です。
山本です。
In message <20040102230135.027CDAF8.ocean@m2.ccsnet.ne.jp>
山本です。
まつもと ゆきひろです
山本です。
山本です。
山本です。
なかだです。
山本です。
なかだです。
山本です。
[ruby-dev:21991] Re: [ruby-list:38619] dl and win32 API call
Tietew です。
On Mon, 20 Oct 2003 23:53:22 +0900
In article <20031020232800.AA1F.ARTONX@yahoo.co.jp>
[[ruby-list:38619] dl and win32 API call]
arton <artonx@yahoo.co.jp> wrote:
> win32に特化した問題ですが、ruby-win32が止まっているようなのでこちらに振
> ります。
まだ止まってますか?
> 主題:ruby-1.8.0添付のdlを利用してWIN32 APIを呼び出すとスタックポインタ
> がずれる。元の話題はhttp://www.tietew.jp/beckrb/msg00113.html です。
> 詳細:WIN32 APIでは、引数のスタックからのポップを呼ばれた側が実行する。
> しかし、dlは関数呼出し後に引数をスタックからポップする。そのため、引数の
> 分だけ余分にスタックポインタがポップされてしまう。
問題提起拾ってもらったのにほっぽってしまってすみません。
上記に関連して,MSVC のランタイムスタックチェックをすり抜けられ
るパッチを作ってみました。(-RTCs を付けていても abort しない)
mswin32 でしか確認できてないのですが,呼び出しが終わった後,全て
のレジスタが正常になっていることを確認しています。
i686-linux でのコンパイルでも,dl.so の make test は正常に終了し
ました。
alloca を呼ぶとスタックフレームが保存されるというコンパイラの仕
様をアテにしているので,他の環境でも問題ないか検証をお願いしたい
です。
Index: ext/Win32API/Win32API.c
===================================================================
RCS file: /src/ruby/ext/Win32API/Win32API.c,v
retrieving revision 1.19
diff -p -u -2 -r1.19 Win32API.c
--- ext/Win32API/Win32API.c 13 Aug 2003 04:52:35 -0000 1.19
+++ ext/Win32API/Win32API.c 21 Nov 2003 05:13:24 -0000
@@ -138,4 +138,22 @@ Win32API_initialize(self, dllname, proc,
}
+#ifdef __MSVC_RUNTIME_CHECKS
+# pragma runtime_checks("s", off)
+#endif
+#ifdef _MSC_VER
+__declspec(noinline)
+#endif
+static unsigned long
+CallApiFunction(ApiFunction, param)
+ FARPROC ApiFunction;
+ struct { unsigned long params[16]; } param;
+{
+ volatile char *guard = ALLOCA_N(char, 1); /* guard stack pointer */
+ return ApiFunction(param);
+}
+#ifdef __MSVC_RUNTIME_CHECKS
+# pragma runtime_checks("s", restore)
+#endif
+
static VALUE
Win32API_Call(argc, argv, obj)
@@ -189,5 +207,5 @@ Win32API_Call(argc, argv, obj)
}
- ret = ApiFunction(param);
+ ret = CallApiFunction(ApiFunction, param);
switch (FIX2INT(obj_export)) {
Index: ext/dl/dl.h
===================================================================
RCS file: /src/ruby/ext/dl/dl.h,v
retrieving revision 1.8
diff -p -u -2 -r1.8 dl.h
--- ext/dl/dl.h 7 Nov 2002 16:42:07 -0000 1.8
+++ ext/dl/dl.h 21 Nov 2003 05:13:24 -0000
@@ -171,4 +171,5 @@
#elif defined(USE_DLSTACK)
# define DLSTACK
+# define DLSTACK_GUARD
# define DLSTACK_METHOD "dl"
# define DLSTACK_PROTO long,long,long,long,long,\
Index: ext/dl/sym.c
===================================================================
RCS file: /src/ruby/ext/dl/sym.c,v
retrieving revision 1.21
diff -p -u -2 -r1.21 sym.c
--- ext/dl/sym.c 8 Nov 2003 13:32:07 -0000 1.21
+++ ext/dl/sym.c 21 Nov 2003 05:13:24 -0000
@@ -353,4 +353,88 @@ rb_dl_win32_set_last_error(VALUE self, V
#endif
+#ifdef DLSTACK_GUARD
+# ifdef __MSVC_RUNTIME_CHECKS
+# pragma runtime_checks("s", off)
+# endif
+#ifdef _MSC_VER
+__declspec(noinline)
+#endif
+static int
+rb_dlsym_guardcall(char type, ANY_TYPE *ret, long *stack, void *func)
+{
+ volatile char *guard = ALLOCA_N(char, 1); /* guard stack pointer */
+ switch(type){
+ case '0':
+ {
+ void (*f)(DLSTACK_PROTO) = func;
+ f(DLSTACK_ARGS);
+ }
+ break;
+ case 'P':
+ case 'p':
+ {
+ void * (*f)(DLSTACK_PROTO) = func;
+ ret->p = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'C':
+ case 'c':
+ {
+ char (*f)(DLSTACK_PROTO) = func;
+ ret->c = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'H':
+ case 'h':
+ {
+ short (*f)(DLSTACK_PROTO) = func;
+ ret->h = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'I':
+ case 'i':
+ {
+ int (*f)(DLSTACK_PROTO) = func;
+ ret->i = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'L':
+ case 'l':
+ {
+ long (*f)(DLSTACK_PROTO) = func;
+ ret->l = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'F':
+ case 'f':
+ {
+ float (*f)(DLSTACK_PROTO) = func;
+ ret->f = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'D':
+ case 'd':
+ {
+ double (*f)(DLSTACK_PROTO) = func;
+ ret->d = f(DLSTACK_ARGS);
+ }
+ break;
+ case 'S':
+ case 's':
+ {
+ char * (*f)(DLSTACK_PROTO) = func;
+ ret->s = f(DLSTACK_ARGS);
+ }
+ break;
+ default:
+ return 0;
+ }
+ return 1;
+}
+# ifdef __MSVC_RUNTIME_CHECKS
+# pragma runtime_checks("s", restore)
+# endif
+#endif /* defined(DLSTACK_GUARD) */
+
VALUE
rb_dlsym_call(int argc, VALUE argv[], VALUE self)
@@ -643,4 +727,10 @@ rb_dlsym_call(int argc, VALUE argv[], VA
DLSTACK_END(sym->type);
+#ifdef DLSTACK_GUARD
+ if(!rb_dlsym_guardcall(sym->type[0], &ret, stack, func)) {
+ FREE_ARGS;
+ rb_raise(rb_eDLTypeError, "unknown type `%c'", sym->type[0]);
+ }
+#else /* defined(DLSTACK_GUARD) */
{
switch( sym->type[0] ){
@@ -712,4 +802,5 @@ rb_dlsym_call(int argc, VALUE argv[], VA
}
}
+#endif /* defubed(DLSTACK_GUARD) */
{
—[ Tietew ]——————————————————————————
メ : tietew@tietew.net / tietew@raug.net / tietew@masuclub.net
ホペ: http://www.tietew.net/ Tietew Windows Lab.
http://www.masuclub.net/ 鱒倶楽部
指紋: 26CB 71BB B595 09C4 0153 81C4 773C 963A D51B 8CAA