зеркало из https://github.com/github/ruby.git
* ext/readline/readline.c (readline_readline): set encoding to result.
* ext/readline/readline.c (readline_s_set_input, Init_readline): save input IO to hidden instance variable. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
793e9423cd
Коммит
6b54d4fd0b
|
@ -1,3 +1,10 @@
|
||||||
|
Fri Dec 28 18:45:29 2007 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
|
* ext/readline/readline.c (readline_readline): set encoding to result.
|
||||||
|
|
||||||
|
* ext/readline/readline.c (readline_s_set_input, Init_readline): save
|
||||||
|
input IO to hidden instance variable.
|
||||||
|
|
||||||
Fri Dec 28 01:55:04 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
|
Fri Dec 28 01:55:04 2007 Martin Duerst <duerst@it.aoyama.ac.jp>
|
||||||
|
|
||||||
* transcode.c (transcode_dispatch): reverted some of the changes
|
* transcode.c (transcode_dispatch): reverted some of the changes
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static VALUE mReadline;
|
static VALUE mReadline;
|
||||||
|
static VALUE id_var_input;
|
||||||
|
|
||||||
#define TOLOWER(c) (isupper(c) ? tolower(c) : c)
|
#define TOLOWER(c) (isupper(c) ? tolower(c) : c)
|
||||||
|
|
||||||
|
@ -93,8 +94,20 @@ readline_readline(int argc, VALUE *argv, VALUE self)
|
||||||
if (RTEST(add_hist) && buff) {
|
if (RTEST(add_hist) && buff) {
|
||||||
add_history(buff);
|
add_history(buff);
|
||||||
}
|
}
|
||||||
if (buff)
|
if (buff) {
|
||||||
|
rb_io_t *ifp;
|
||||||
|
rb_encoding* enc;
|
||||||
|
VALUE input = rb_ivar_get(self, id_var_input);
|
||||||
|
GetOpenFile(input, ifp);
|
||||||
|
if (ifp->enc)
|
||||||
|
enc = ifp->enc;
|
||||||
|
else if (ifp->mode & FMODE_BINMODE)
|
||||||
|
enc = rb_ascii8bit_encoding();
|
||||||
|
else
|
||||||
|
enc = rb_default_external_encoding();
|
||||||
result = rb_tainted_str_new2(buff);
|
result = rb_tainted_str_new2(buff);
|
||||||
|
rb_enc_associate(result, enc);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
result = Qnil;
|
result = Qnil;
|
||||||
if (buff) free(buff);
|
if (buff) free(buff);
|
||||||
|
@ -110,6 +123,7 @@ readline_s_set_input(VALUE self, VALUE input)
|
||||||
Check_Type(input, T_FILE);
|
Check_Type(input, T_FILE);
|
||||||
GetOpenFile(input, ifp);
|
GetOpenFile(input, ifp);
|
||||||
rl_instream = rb_io_stdio_file(ifp);
|
rl_instream = rb_io_stdio_file(ifp);
|
||||||
|
rb_ivar_set(self, id_var_input, input);
|
||||||
return input;
|
return input;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -755,6 +769,9 @@ Init_readline()
|
||||||
rb_define_singleton_method(mReadline, "filename_quote_characters",
|
rb_define_singleton_method(mReadline, "filename_quote_characters",
|
||||||
readline_s_get_filename_quote_characters, 0);
|
readline_s_get_filename_quote_characters, 0);
|
||||||
|
|
||||||
|
id_var_input = rb_intern("#input");
|
||||||
|
rb_ivar_set(mReadline, id_var_input, rb_stdin);
|
||||||
|
|
||||||
history = rb_obj_alloc(rb_cObject);
|
history = rb_obj_alloc(rb_cObject);
|
||||||
rb_extend_object(history, rb_mEnumerable);
|
rb_extend_object(history, rb_mEnumerable);
|
||||||
rb_define_singleton_method(history,"to_s", hist_to_s, 0);
|
rb_define_singleton_method(history,"to_s", hist_to_s, 0);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче