Index: [Article Count Order] [Thread]

Date: Wed, 10 Sep 2003 02:37:58 +0900 (JST)
From: GOTOU Yuuzou <gotoyuzo@notwork.org>
Subject: [webrickja:92] Re: 超漢字で Webrick
To: webrickja@notwork.org
Message-Id: <20030910.023758.280044606.gotoyuzo@kotetsu.does.notwork.org>
In-Reply-To: <4.3.2-J.20030909193951.0300e640@192.47.124.3>
References: <4.3.2-J.20030909193951.0300e640@192.47.124.3>
X-Mail-Count: 00092

In message <4.3.2-J.20030909193951.0300e640@192.47.124.3>,
 `TOYOFUKU Chikanobu <nobu_toyofuku@nifty.com>' wrote:
>    大体動いてはいるものの超漢字版 ruby の実装の不備から困って
> いることがあります。
> 
> (1) getpeername() の移植がうまくいっていないためそのままだと
>    Socket::peername でエラーになってしまうので今は無理矢理
>    Socket::peername は [AF_INET, 0, "0.0.0.0", "0.0.0.0"] を
>    返すようにしています。
>    エラーにしたまま webrick側で rescue してもらうことを期待
>    するのはあつかましいでしょうか。

getpeername(2) のセットする errno でエラーでないものはないよ
うですから、例外が上がることを期待するのはいまいちな気がします。

> (2) CGIでは cgihandler から cgi_runner を popen して、
>    cgi_runner からスクリプトを exec しているようですが超漢字版
>    ruby は exec がない(取りあえず rb_notimplement にしている) 
>    のでエラーになってしまいます。
>    popen は動くのですが何かよい対策はないでしょうか。

例外の場合は system を使うというのはどうでしょうか。

retrieving revision 1.1
diff -u -p -r1.1 cgi_runner.rb
--- cgi_runner.rb	23 Jul 2003 16:51:36 -0000	1.1
+++ cgi_runner.rb	9 Sep 2003 17:31:47 -0000
@@ -18,6 +18,15 @@ def sysread(io, size)
   return buf
 end
 
+def exec_script(*cmd)
+  begin
+    exec(*cmd)
+  rescue NotImplementedError
+    system(*cmd)
+    exit($?>>8)
+  end
+end
+
 STDIN.binmode
 
 buf = ""
@@ -39,7 +48,7 @@ dir = File::dirname(ENV["SCRIPT_FILENAME
 Dir::chdir dir
 
 if interpreter = ARGV[0]
-  exec(interpreter, ENV["SCRIPT_FILENAME"])
+  exec_script(interpreter, ENV["SCRIPT_FILENAME"])
   # NOTREACHED
 end
-exec ENV["SCRIPT_FILENAME"]
+exec_script ENV["SCRIPT_FILENAME"]

-- 
ごとうゆうぞう