ruby-changes:22041
From: nobu <ko1@a...>
Date: Wed, 21 Dec 2011 15:23:25 +0900 (JST)
Subject: [ruby-changes:22041] nobu:r34090 (trunk): * goruby.c (goruby_options): auto irb.
nobu 2011-12-21 15:23:15 +0900 (Wed, 21 Dec 2011) New Revision: 34090 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=34090 Log: * goruby.c (goruby_options): auto irb. Modified files: trunk/goruby.c Index: goruby.c =================================================================== --- goruby.c (revision 34089) +++ goruby.c (revision 34090) @@ -1,8 +1,13 @@ +#include <unistd.h> + void Init_golf(void); +#define ruby_options goruby_options #define ruby_run_node goruby_run_node #include "main.c" +#undef ruby_options #undef ruby_run_node +RUBY_EXTERN void *ruby_options(int argc, char **argv); RUBY_EXTERN int ruby_run_node(void*); RUBY_EXTERN void ruby_init_ext(const char *name, void (*init)(void)); @@ -13,6 +18,29 @@ return arg; } +void * +goruby_options(int argc, char **argv) +{ + static const char cmd[] = "require 'irb'\nIRB.start"; + int rw[2], infd; + void *ret; + + if ((isatty(0) && isatty(1) && isatty(2)) && (pipe(rw) == 0)) { + infd = dup(0); + dup2(rw[0], 0); + close(rw[0]); + write(rw[1], cmd, sizeof(cmd) - 1); + close(rw[1]); + ret = ruby_options(argc, argv); + dup2(infd, 0); + close(infd); + return ret; + } + else { + return ruby_options(argc, argv); + } +} + int goruby_run_node(void *arg) { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/