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