1# 2# cgi_runner.rb -- CGI launcher. 3# 4# Author: IPR -- Internet Programming with Ruby -- writers 5# Copyright (c) 2000 TAKAHASHI Masayoshi, GOTOU YUUZOU 6# Copyright (c) 2002 Internet Programming with Ruby writers. All rights 7# reserved. 8# 9# $IPR: cgi_runner.rb,v 1.9 2002/09/25 11:33:15 gotoyuzo Exp $ 10 11def sysread(io, size) 12 buf = "" 13 while size > 0 14 tmp = io.sysread(size) 15 buf << tmp 16 size -= tmp.bytesize 17 end 18 return buf 19end 20 21STDIN.binmode 22 23len = sysread(STDIN, 8).to_i 24out = sysread(STDIN, len) 25STDOUT.reopen(open(out, "w")) 26 27len = sysread(STDIN, 8).to_i 28err = sysread(STDIN, len) 29STDERR.reopen(open(err, "w")) 30 31len = sysread(STDIN, 8).to_i 32dump = sysread(STDIN, len) 33hash = Marshal.restore(dump) 34ENV.keys.each{|name| ENV.delete(name) } 35hash.each{|k, v| ENV[k] = v if v } 36 37dir = File::dirname(ENV["SCRIPT_FILENAME"]) 38Dir::chdir dir 39 40if ARGV[0] 41 argv = ARGV.dup 42 argv << ENV["SCRIPT_FILENAME"] 43 exec(*argv) 44 # NOTREACHED 45end 46exec ENV["SCRIPT_FILENAME"] 47