[#9569] Re: [ruby-ext:01030] Re: gnome-ruby package — Hiroshi IGARASHI <igarashi@...>
いがらしです。
5 messages
2000/04/14
[#9581] SIGFPE isn't raised on FreeBSD 4.0 — gotoken@... (GOTO Kentaro)
ごとけんです
18 messages
2000/04/18
[#9582] Re: SIGFPE isn't raised on FreeBSD 4.0
— ARIMA Yasuhiro <fit0298@...>
2000/04/18
有馬です。
[#9583] Re: SIGFPE isn't raised on FreeBSD 4.0
— EGUCHI Osamu <eguchi@...>
2000/04/18
えぐち@エスアンドイー です。
[#9587] Re: SIGFPE isn't raised on FreeBSD 4.0
— nobu.nakada@...
2000/04/18
なかだです。
[#9588] Re: SIGFPE isn't raised on FreeBSD 4.0
— matz@... (Yukihiro Matsumoto)
2000/04/18
まつもと ゆきひろです
[#9589] Re: SIGFPE isn't raised on FreeBSD 4.0
— nobu.nakada@...
2000/04/18
なかだです。
[#9590] Re: SIGFPE isn't raised on FreeBSD 4.0
— matz@... (Yukihiro Matsumoto)
2000/04/18
まつもと ゆきひろです
[#9591] Re: SIGFPE isn't raised on FreeBSD 4.0
— nobu.nakada@...
2000/04/18
なかだです。
[#9592] Re: SIGFPE isn't raised on FreeBSD 4.0
— matz@... (Yukihiro Matsumoto)
2000/04/18
まつもと ゆきひろです
[#9599] module_eval — Tadayoshi Funaba <tadf@...>
ふなばです。
7 messages
2000/04/20
[ruby-dev:9580] [BUG] B_ERROR == -1 !
From:
Katsuyuki Komatsu <komatsu@...>
Date:
2000-04-17 14:49:37 UTC
List:
ruby-dev #9580
小松です。
BeOSだとB_ERROR (General OS error) というのがerrnoに設定される
場合があるのですが、この値が-1のためset_syserr()が落ちてしまいます。
$ cat httpget.rb
require 'net/http.rb'
c = Net::HTTP::Proxy(ENV['PROXY_HOST'], ENV['PROXY_PORT'].to_i)
c.start('www.ruby-lang.org', 80) do |http|
header, data = http.get('/ja/index.html')
print data
end
$ ruby httpget.rb
……
/boot/home/config/lib/ruby/1.4/net/protocol.rb:703: [BUG] Segmentation fault
Abort
$
うまくBeOS用のエラーテーブルに入れられないので、B_ERRORだけ
特別扱いして、Errno::ERRORを作るようにしてみました。
# error.cのBeOSのところはインデントがなぜか3なので合わせています。
ところで、BeOSの場合だけset_syserr()でrb_global_variable()を
呼んでますが、必要なんでしょうか?
# 追加部分でも呼んでみましたが……
--- ruby-1.4.4.dist/error.c Mon Apr 10 14:48:27 2000
+++ ruby-1.4.4/error.c Mon Apr 17 23:09:22 2000
@@ -404,2 +404,3 @@ typedef struct {
+static VALUE syserr_error;
static VALUE syserr_list_b_general[16+1];
@@ -464,2 +465,7 @@ set_syserr(i, name)
#ifdef __BEOS__
+ if (i == B_ERROR) {
+ syserr_error = error;
+ rb_global_variable(&syserr_error);
+ return error;
+ }
i -= B_GENERAL_ERROR_BASE;
@@ -497,2 +503,3 @@ get_syserr(int i)
+ if (i == B_ERROR) return syserr_error;
i -= B_GENERAL_ERROR_BASE;
@@ -688,2 +695,3 @@ init_syserr()
}
+ set_syserr(B_ERROR, "ERROR");
#else
--
小松克行 / Katsuyuki Komatsu <komatsu@sarion.co.jp>