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 11 def sysread(io, size) 12 buf = "" 13 while size > 0 14 tmp = io.sysread(size) 15 buf << tmp 16 size -= tmp.size 17 end 18 return buf 19 end 20 21 STDIN.binmode 22 23 buf = "" 24 len = sysread(STDIN, 8).to_i 25 out = sysread(STDIN, len) 26 STDOUT.reopen(open(out, "w")) 27 28 len = sysread(STDIN, 8).to_i 29 err = sysread(STDIN, len) 30 STDERR.reopen(open(err, "w")) 31 32 len = sysread(STDIN, 8).to_i 33 dump = sysread(STDIN, len) 34 hash = Marshal.restore(dump) 35 ENV.keys.each{|name| ENV.delete(name) } 36 hash.each{|k, v| ENV[k] = v if v } 37 38 dir = File::dirname(ENV["SCRIPT_FILENAME"]) 39 Dir::chdir dir 40 41 if interpreter = ARGV[0] 42 argv = ARGV.dup 43 argv << ENV["SCRIPT_FILENAME"] 44 exec(*argv) 45 # NOTREACHED 46 end 47 exec ENV["SCRIPT_FILENAME"]