[前][次][番号順一覧][スレッド一覧]

ruby-changes:37218

From: naruse <ko1@a...>
Date: Sat, 17 Jan 2015 16:50:15 +0900 (JST)
Subject: [ruby-changes:37218] naruse:r49299 (ruby_2_2): merge revision(s) 49244: [Backport #6232]

naruse	2015-01-17 16:50:07 +0900 (Sat, 17 Jan 2015)

  New Revision: 49299

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49299

  Log:
    merge revision(s) 49244: [Backport #6232]
    
    * ext/readline/readline.c (readline_s_refresh_line): initialize
      before rl_refresh_line(), as some function make the internal
      state non-clean but rl_refresh_line() does not re-initialize it.
      [ruby-core:43957] [Bug #6232]

  Modified directories:
    branches/ruby_2_2/
  Modified files:
    branches/ruby_2_2/ChangeLog
    branches/ruby_2_2/ext/readline/readline.c
    branches/ruby_2_2/test/readline/test_readline.rb
    branches/ruby_2_2/version.h
Index: ruby_2_2/ChangeLog
===================================================================
--- ruby_2_2/ChangeLog	(revision 49298)
+++ ruby_2_2/ChangeLog	(revision 49299)
@@ -1,3 +1,10 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_2/ChangeLog#L1
+Sat Jan 17 16:49:49 2015  Nobuyoshi Nakada  <nobu@r...>
+
+	* ext/readline/readline.c (readline_s_refresh_line): initialize
+	  before rl_refresh_line(), as some function make the internal
+	  state non-clean but rl_refresh_line() does not re-initialize it.
+	  [ruby-core:43957] [Bug #6232]
+
 Sat Jan 17 16:47:20 2015  NAKAMURA Usaku  <usa@r...>
 
 	* eval_error.c (error_print): pos and len parameters of rb_str_substr()
Index: ruby_2_2/ext/readline/readline.c
===================================================================
--- ruby_2_2/ext/readline/readline.c	(revision 49298)
+++ ruby_2_2/ext/readline/readline.c	(revision 49299)
@@ -359,6 +359,34 @@ clear_rl_outstream(void) https://github.com/ruby/ruby/blob/trunk/ruby_2_2/ext/readline/readline.c#L359
     readline_outstream = Qfalse;
 }
 
+static void
+prepare_readline(void)
+{
+    static int initialized = 0;
+    if (!initialized) {
+	rl_initialize();
+	initialized = 1;
+    }
+
+    if (readline_instream) {
+        rb_io_t *ifp;
+        rb_io_check_initialized(ifp = RFILE(rb_io_taint_check(readline_instream))->fptr);
+        if (ifp->fd < 0) {
+            clear_rl_instream();
+            rb_raise(rb_eIOError, "closed readline input");
+        }
+    }
+
+    if (readline_outstream) {
+        rb_io_t *ofp;
+        rb_io_check_initialized(ofp = RFILE(rb_io_taint_check(readline_outstream))->fptr);
+        if (ofp->fd < 0) {
+            clear_rl_outstream();
+            rb_raise(rb_eIOError, "closed readline output");
+        }
+    }
+}
+
 /*
  * call-seq:
  *   Readline.readline(prompt = "", add_hist = false) -> string or nil
@@ -460,23 +488,7 @@ readline_readline(int argc, VALUE *argv, https://github.com/ruby/ruby/blob/trunk/ruby_2_2/ext/readline/readline.c#L488
         prompt = RSTRING_PTR(tmp);
     }
 
-    if (readline_instream) {
-        rb_io_t *ifp;
-        rb_io_check_initialized(ifp = RFILE(rb_io_taint_check(readline_instream))->fptr);
-        if (ifp->fd < 0) {
-            clear_rl_instream();
-            rb_raise(rb_eIOError, "closed readline input");
-        }
-    }
-
-    if (readline_outstream) {
-        rb_io_t *ofp;
-        rb_io_check_initialized(ofp = RFILE(rb_io_taint_check(readline_outstream))->fptr);
-        if (ofp->fd < 0) {
-            clear_rl_outstream();
-            rb_raise(rb_eIOError, "closed readline output");
-        }
-    }
+    prepare_readline();
 
 #ifdef _WIN32
     rl_prep_terminal(1);
@@ -1549,6 +1561,7 @@ readline_s_get_filename_quote_characters https://github.com/ruby/ruby/blob/trunk/ruby_2_2/ext/readline/readline.c#L1561
 static VALUE
 readline_s_refresh_line(VALUE self)
 {
+    prepare_readline();
     rl_refresh_line(0, 0);
     return Qnil;
 }
Index: ruby_2_2/version.h
===================================================================
--- ruby_2_2/version.h	(revision 49298)
+++ ruby_2_2/version.h	(revision 49299)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_2/version.h#L1
 #define RUBY_VERSION "2.2.0"
 #define RUBY_RELEASE_DATE "2015-01-17"
-#define RUBY_PATCHLEVEL 21
+#define RUBY_PATCHLEVEL 22
 
 #define RUBY_RELEASE_YEAR 2015
 #define RUBY_RELEASE_MONTH 1
Index: ruby_2_2/test/readline/test_readline.rb
===================================================================
--- ruby_2_2/test/readline/test_readline.rb	(revision 49298)
+++ ruby_2_2/test/readline/test_readline.rb	(revision 49299)
@@ -448,6 +448,18 @@ class TestReadline < Test::Unit::TestCas https://github.com/ruby/ruby/blob/trunk/ruby_2_2/test/readline/test_readline.rb#L448
     Readline::HISTORY.clear
   end if !/EditLine/n.match(Readline::VERSION)
 
+  def test_refresh_line
+    bug6232 = '[ruby-core:43957] [Bug #6232] refresh_line after set_screen_size'
+    with_temp_stdio do |stdin, stdout|
+      replace_stdio(stdin.path, stdout.path) do
+        assert_ruby_status(%w[-rreadline -], <<-'end;', bug6232)
+          Readline.set_screen_size(40, 80)
+          Readline.refresh_line
+        end;
+      end
+    end
+  end if Readline.respond_to?(:refresh_line)
+
   private
 
   def replace_stdio(stdin_path, stdout_path)

Property changes on: ruby_2_2
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r49244


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]