diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-21 06:23:15 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-12-21 06:23:15 +0000 |
commit | 7bc839bdd2befe13cbb41081cb430c28bcc1974c (patch) | |
tree | da5054852920d2ec3379487c28cd5f11a086c97d /goruby.c | |
parent | f9a4d5717c2cc4eddb44439f7d85d6840e928127 (diff) |
* goruby.c (goruby_options): auto irb.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34090 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'goruby.c')
-rw-r--r-- | goruby.c | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -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 @@ init_golf(VALUE arg) 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) { |