ruby-changes:20018
From: nobu <ko1@a...>
Date: Mon, 13 Jun 2011 23:28:59 +0900 (JST)
Subject: [ruby-changes:20018] nobu:r32065 (trunk): * ext/io/console/console.c (console_dev): take care of no-ctty
nobu 2011-06-13 23:28:53 +0900 (Mon, 13 Jun 2011) New Revision: 32065 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32065 Log: * ext/io/console/console.c (console_dev): take care of no-ctty case. Modified files: trunk/ChangeLog trunk/ext/io/console/console.c trunk/test/io/console/test_io_console.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 32064) +++ ChangeLog (revision 32065) @@ -1,3 +1,8 @@ +Mon Jun 13 23:28:50 2011 Nobuyoshi Nakada <nobu@r...> + + * ext/io/console/console.c (console_dev): take care of no-ctty + case. + Mon Jun 13 23:06:12 2011 KOSAKI Motohiro <kosaki.motohiro@g...> * thread_pthread.c: rewrite GVL completely. Index: ext/io/console/console.c =================================================================== --- ext/io/console/console.c (revision 32064) +++ ext/io/console/console.c (revision 32065) @@ -557,27 +557,36 @@ VALUE out; rb_io_t *ofptr; #endif + int fd, mode; - args[1] = INT2FIX(O_RDWR); #ifdef CONSOLE_DEVICE_FOR_WRITING - args[0] = rb_str_new2(CONSOLE_DEVICE_FOR_WRITING); + fd = open(CONSOLE_DEVICE_FOR_WRITING, O_WRONLY); + if (fd < 0) return Qnil; + args[1] = INT2FIX(O_WRONLY); + args[0] = INT2NUM(fd); out = rb_class_new_instance(2, args, klass); #endif - args[0] = rb_str_new2(CONSOLE_DEVICE_FOR_READING); + fd = open(CONSOLE_DEVICE_FOR_READING, O_RDWR); + if (fd < 0) { +#ifdef CONSOLE_DEVICE_FOR_WRITING + rb_io_close(out); +#endif + return Qnil; + } + args[1] = INT2FIX(O_RDWR); + args[0] = INT2NUM(fd); con = rb_class_new_instance(2, args, klass); + GetOpenFile(con, fptr); + fptr->pathv = rb_obj_freeze(rb_str_new2(CONSOLE_DEVICE)); #ifdef CONSOLE_DEVICE_FOR_WRITING - GetOpenFile(con, fptr); GetOpenFile(out, ofptr); # ifdef HAVE_RB_IO_GET_WRITE_IO -# ifdef _WIN32 - ofptr->pathv = fptr->pathv = rb_str_new2(CONSOLE_DEVICE); -# endif + ofptr->pathv = fptr->pathv; fptr->tied_io_for_writing = out; # else fptr->f2 = ofptr->f; ofptr->f = 0; # endif - fptr->mode |= FMODE_WRITABLE; #endif rb_const_set(klass, id_console, con); } Index: test/io/console/test_io_console.rb =================================================================== --- test/io/console/test_io_console.rb (revision 32064) +++ test/io/console/test_io_console.rb (revision 32065) @@ -160,3 +160,13 @@ s.close if s end end if defined?(PTY) and defined?(IO::console) + +class TestIO_Console < Test::Unit::TestCase + require_relative '../../ruby/envutil' + + def test_noctty + assert_in_out_err(["-rio/console"], + "Process.daemon(true, true); p IO.console", + ["nil"]) + end +end if defined?(Process.daemon) and defined?(IO::console) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/