summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ext/readline/readline.c7
-rw-r--r--test/readline/test_readline.rb18
2 files changed, 15 insertions, 10 deletions
diff --git a/ext/readline/readline.c b/ext/readline/readline.c
index 6100633f2..87a1ff037 100644
--- a/ext/readline/readline.c
+++ b/ext/readline/readline.c
@@ -602,15 +602,14 @@ static VALUE
readline_s_get_completion_append_character(VALUE self)
{
#ifdef HAVE_RL_COMPLETION_APPEND_CHARACTER
- VALUE str;
+ char buf[1];
rb_secure(4);
if (rl_completion_append_character == '\0')
return Qnil;
- str = rb_str_new(0, 1);
- RSTRING_PTR(str)[0] = rl_completion_append_character;
- return str;
+ buf[0] = (char) rl_completion_append_character;
+ return rb_locale_str_new(buf, 1);
#else
rb_notimplement();
return Qnil; /* not reached */
diff --git a/test/readline/test_readline.rb b/test/readline/test_readline.rb
index 36aadd92d..cf809e20d 100644
--- a/test/readline/test_readline.rb
+++ b/test/readline/test_readline.rb
@@ -166,12 +166,18 @@ class TestReadline < Test::Unit::TestCase
def test_completion_append_character
begin
- Readline.completion_append_character = "x"
- assert_equal("x", Readline.completion_append_character)
- Readline.completion_append_character = "xyz"
- assert_equal("x", Readline.completion_append_character)
- Readline.completion_append_character = nil
- assert_equal(nil, Readline.completion_append_character)
+ enc = Encoding.default_internal || Encoding.find("locale")
+ data_expected = [
+ ["x", "x"],
+ ["xyx", "x"],
+ [" ", " "],
+ ["\t", "\t"],
+ ]
+ data_expected.each do |(data, expected)|
+ Readline.completion_append_character = data
+ assert_equal(expected, Readline.completion_append_character)
+ assert_equal(enc, Readline.completion_append_character.encoding)
+ end
Readline.completion_append_character = ""
assert_equal(nil, Readline.completion_append_character)
rescue NotImplementedError