[#12340] CGI#out — Shugo Maeda <shugo@...>
前田です。
[#12354] re: higher-resolution Time for Win32 — matz@... (Yukihiro Matsumoto)
まつもと ゆきひろです
[#12364] Dir::fnmatch? — "Akinori MUSHA" <knu@...>
[ruby-dev:12229] の、 Dir::fnmatch? の追加には特に問題や反対
まつもと ゆきひろです
[#12385] Re: NaN, Infinity (Bug?) — WATANABE Hirofumi <eban@...>
わたなべです。
[#12387] reducing logical operation — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
えぐち@エスアンドイー です。
なかだです。
えぐち@エスアンドイー です。
なかだです。
えぐち@エスアンドイー です。
木山です.
[#12404] fork in threads — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
なひです。
[#12405] at_exit — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
[#12415] — Koji Arai <JCA02266@...>
新井です。
[#12425] bignum % の結果が負数になることがある — Hisayasu Nakao <h-nakao@...>
最近、ruby-1.6.2を使い出したばかりの中尾です。
わたなべです。
In message <4518-Mon12Mar2001145434+0900-eban@os.rim.or.jp>
まつもと ゆきひろです
In message <984469222.234203.1007.nullmailer@ev.netlab.zetabits.com>
なかだです。
In message <200103131446.XAA22520@sharui.nakada.kanuma.tochigi.jp>
まつもと ゆきひろです
In message <984550885.417146.3670.nullmailer@ev.netlab.zetabits.com>
まつもと ゆきひろです
In message <984553493.009507.3747.nullmailer@ev.netlab.zetabits.com>
まつもと ゆきひろです
In message <984579430.080967.5569.nullmailer@ev.netlab.zetabits.com>
まつもと ゆきひろです
[#12483] sort! of empty array — Shin-ichiro HARA <sinara@...>
原です。
まつもと ゆきひろです
なひです。
[#12492] compile error on mswin32 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
まつもと ゆきひろです
[#12513] SOLIBS — "Akinori MUSHA" <knu@...>
configure.in に以下のような修正を加えたいと思っています。
In message <86itlbdv32.wl@archon.local.idaemons.org>
[#12535] シンボリックリンクを含むパスを渡した時の Dir.glob() の動作 — tachino Nobuhiro <tachino@...>
[#12537] re-initialize ARGF — Masaki Suketa <masaki.suketa@...>
助田です。
[#12541] Thread.kill — Masatoshi SEKI <m_seki@...>
[#12570] compile error on ews48 — Koji Arai <JCA02266@...>
新井です。
[#12578] require 'win32api' — Kazuhiro NISHIYAMA <zn@...>
require 'win32api'のエラーメッセージがわかりにくいと
なかだです。
なかだです。
In <200103211407.XAA03408@sharui.nakada.kanuma.tochigi.jp>
なかだです。
In <200103220905.SAA01745@m3.gw.fujitsu.co.jp>
artonです。
[#12582] finalizer problem — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
まつもと ゆきひろです
けいじゅ@日本ラショナルソフトウェアです.
けいじゅ@日本ラショナルソフトウェアです.
[#12605] extern inline (ruby.h) ruby-1.6.3 — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
まつもと ゆきひろです
渡辺哲也です。
まつもと ゆきひろです
まつもと ゆきひろです
新井です。
[#12621] Marshal bug still remains — "Akinori MUSHA" <knu@...>
Marshal にまだバグが残っています。最新安定版で:
[#12623] [req] Symbol#intern — keiju@... (Keiju ISHITSUKA)
けいじゅ@日本ラショナルソフトウェアです.
[#12672] segv on Continuation#call on C_ALLOCA system — Koji Arai <JCA02266@...>
新井です。
[#12674] Was: [rubyist:0454] Re: to_str — Kenichi Komiya <kom@...1.accsnet.ne.jp>
まつもと ゆきひろです
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
なかだです。
新井です。
なかだです。
まつもと ゆきひろです
[#12693] Re: [ruby-cvs] ruby/lib: * ext/extmk.rb.in, lib/mkmf.rb: move C++ rules to the right place. — "Nobuyoshi.Nakada" <nobu.nakada@...>
なかだです。
At Wed, 28 Mar 2001 21:08:14 +0900,
[#12699] cross compile mingw-ruby on cygwin — Koji Arai <JCA02266@...>
新井です。
[ruby-dev:12663] Re: require 'win32api'
なかだです。
At Sat, 24 Mar 2001 12:59:43 +0900,
arton <arton@geocities.co.jp> wrote:
> > システムの時期によってはロードするライブラリをかえなきゃいけ
> > ないということでなければ、どちらでもいいんですけど。その場合は
> > LoadLibraryEx() を二回試せばいいだけですが、なんかめんどくさい
> > し。
> さすがに、それは無さそうな。
(snip)
了解です。単なる MSDN のミスということで気にすることはないで
すね。
> あと、書き間違いがありました。
う゛、家には Windows の開発環境がないもので(^^;;;。確認せずに
出しちゃいました。すいません。
> #ruby-dev[12598]は不要?
要りません。それに ext/Win32API/Win32API.c の最後にある
Init_win32api() 自体も不要です。
# 名前によって動作をかえる拡張ライブラリなんて作らないよなぁ。
> Windows98だと、書き間違いは結構、速度的なペナルティになりますね。正しく
> 書けば瞬間ですが、間違えると探索しているというのが目に見えます(1〜2秒く
> らいかな?)
> というわけで、正しく書いたほうが当然お得。
やはりかなりのオーバーヘッドですね。
> あと、ちょっと気になったんですが、これ
> rerequi 'SoCket'
> でも、通っちゃうんですよね。スクリプトを他のOSに持ってったときに、悩むこ
> とになりませんか? rb_warningじゃなくて、rb_warnで強制的に文句垂れたほ
> うがいいような気がします。
通っちゃうのは逆にはねる方法が存在しないのでどうしようもない
んですが、オーバーヘッドも考えると rb_warn() の方がいいようです。
それと dlerror() ではすでにファイル名もエントリポイント名も含
まれてたので、_WIN32 && !__CYGWIN__ な環境だけに絞りました。
Index: dln.c
===================================================================
RCS file: /cvs/ruby/src/ruby/dln.c,v
retrieving revision 1.20
diff -u -2 -p -r1.20 dln.c
--- dln.c 2001/03/13 05:45:08 1.20
+++ dln.c 2001/03/24 08:12:10
@@ -86,6 +86,12 @@ int eaccess();
# if defined(__hp9000s300) || (defined(__NetBSD__) && !defined(__ELF__)) || defined(__BORLANDC__) || (defined(__FreeBSD__) && __FreeBSD__ < 3) || defined(__OpenBSD__) || defined(NeXT) || defined(__WATCOMC__) || defined(__APPLE__)
# define FUNCNAME_PATTERN "_Init_%s"
+# define FUNCNAME_FEATURE(n) ((n) + 6)
+# define FUNCNAME_MATCH(n1, n2) (strncmp((n1), (n2), 6) == 0 && \
+ strcasecmp(FUNCNAME_FEATURE(n1), FUNCNAME_FEATURE(n2)) == 0)
# else
# define FUNCNAME_PATTERN "Init_%s"
+# define FUNCNAME_FEATURE(n) ((n) + 5)
+# define FUNCNAME_MATCH(n1, n2) (strncmp((n1), (n2), 5) == 0 && \
+ strcasecmp(FUNCNAME_FEATURE(n1), FUNCNAME_FEATURE(n2)) == 0)
# endif
#endif
@@ -1114,4 +1120,85 @@ dln_sym(name)
#if defined _WIN32 && !defined __CYGWIN__
#include <windows.h>
+
+typedef BOOL (__stdcall *initialize_t)(HANDLE, const char*, BOOL);
+typedef BOOL (__stdcall *loadmodule_t)(HANDLE, HANDLE, const char *, const char *, DWORD, DWORD);
+typedef BOOL (__stdcall *unloadmodule_t)(HANDLE, DWORD);
+typedef BOOL (__stdcall *enumsyms_t)(HANDLE, DWORD, BOOL (CALLBACK *)(const char*, ULONG, ULONG, void*), void*);
+
+struct search_entry {
+ HMODULE module;
+ const char* sym;
+ char *name;
+ FARPROC addr;
+};
+
+static BOOL CALLBACK
+symbols_i(const char *name, ULONG addr, ULONG size, void* arg)
+{
+ struct search_entry *const ent = arg;
+ FARPROC proc;
+
+ if (FUNCNAME_MATCH(name, ent->sym) &&
+ (proc = GetProcAddress(ent->module, name))) {
+ ent->addr = proc;
+ strcpy(ent->name, name);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static FARPROC
+search_insensitively(const char *path, const char *sym, char *name, HMODULE module)
+{
+ static HANDLE imagehlp;
+ static initialize_t initialize;
+ static loadmodule_t loadmodule;
+ static unloadmodule_t unloadmodule;
+ static enumsyms_t enumsyms;
+ DWORD base;
+ struct search_entry ent;
+
+ if (!imagehlp) {
+ if (!(imagehlp = LoadLibraryExA("imagehlp.dll", NULL, LOAD_WITH_ALTERED_SEARCH_PATH)) ||
+ !(initialize = (initialize_t)GetProcAddress(imagehlp, "SymInitialize")) ||
+ !(loadmodule = (loadmodule_t)GetProcAddress(imagehlp, "SymLoadModule")) ||
+ !(unloadmodule = (unloadmodule_t)GetProcAddress(imagehlp, "SymUnloadModule")) ||
+ !(enumsyms = (enumsyms_t)GetProcAddress(imagehlp, "SymEnumerateSymbols")))
+ {
+ errno = GetLastError();
+ rb_warning("can't load image help library - %s", strerror(errno));
+ return NULL;
+ }
+
+ if (!(*initialize)(0, NULL, FALSE)) {
+ errno = GetLastError();
+ rb_warning("SymInitialize - %s", strerror(errno));
+ initialize = NULL;
+ return NULL;
+ }
+ }
+
+ if (!initialize) return NULL;
+
+ if (!(base = (*loadmodule)(0, 0, path, 0, 0, 0))) {
+ errno = GetLastError();
+ rb_warning("SymLoadModule(%s) - %s", path, strerror(errno));
+ return NULL;
+ }
+
+ ent.addr = NULL;
+ ent.sym = sym;
+ ent.name = name;
+ ent.module = module;
+ if (!(*enumsyms)(0, base, symbols_i, &ent)) {
+ errno = GetLastError();
+ rb_warning("SymEnumerateSymbols(%s:%s) - %s", path, sym, strerror(errno));
+ ent.addr = NULL;
+ }
+
+ (*unloadmodule)(0, base);
+
+ return ent.addr;
+}
#endif
@@ -1235,11 +1322,16 @@ dln_load(file)
if ((handle =
LoadLibraryExA(winfile, NULL, LOAD_WITH_ALTERED_SEARCH_PATH)) == NULL) {
- printf("LoadLibraryExA: %s\n", winfile);
goto failed;
}
if ((init_fct = (void(*)())GetProcAddress(handle, buf)) == NULL) {
- printf("GetProcAddress %s\n", buf);
- goto failed;
+ /* try case insensitive search */
+ int len = strlen(buf) + 1/* including null terminator */;
+ char *name = (len > sizeof(buf) / 2) ? alloca(len) : buf + len;
+ if (!(init_fct = (void(*)())search_insensitively(winfile, buf, name, handle))) {
+ rb_loaderror("%s - %s\n%s", dln_strerror(), buf, file);
+ }
+ rb_warn("use `%s' to require, not but wrong-case name `%s'",
+ FUNCNAME_FEATURE(name), FUNCNAME_FEATURE(buf));
}
/* Call the init code */
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦