mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/zlib/zlib.c (rb_gzreader_ungetc): should be able to unget
Fixnum. * ext/stringio/stringio.c (strio_ungetc): should convert unget string. * ext/stringio/stringio.c (strio_ungetbyte): new method. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19883 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
34d1e9bb25
commit
81525af4c9
3 changed files with 34 additions and 3 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
Wed Oct 22 07:09:19 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* ext/zlib/zlib.c (rb_gzreader_ungetc): should be able to unget
|
||||
Fixnum.
|
||||
|
||||
* ext/stringio/stringio.c (strio_ungetc): should convert unget
|
||||
string.
|
||||
|
||||
* ext/stringio/stringio.c (strio_ungetbyte): new method.
|
||||
|
||||
Wed Oct 22 05:46:25 2008 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* include/ruby/vm.h: write a comment.
|
||||
|
|
|
@ -701,7 +701,7 @@ strio_ungetc(VALUE self, VALUE c)
|
|||
struct StringIO *ptr = readable(StringIO(self));
|
||||
long lpos, clen;
|
||||
char *p, *pend;
|
||||
rb_encoding *enc;
|
||||
rb_encoding *enc, *enc2;
|
||||
|
||||
if (NIL_P(c)) return Qnil;
|
||||
if (FIXNUM_P(c)) {
|
||||
|
@ -714,7 +714,11 @@ strio_ungetc(VALUE self, VALUE c)
|
|||
}
|
||||
else {
|
||||
SafeStringValue(c);
|
||||
enc = rb_enc_check(ptr->string, c);
|
||||
enc = rb_enc_get(ptr->string);
|
||||
enc2 = rb_enc_get(c);
|
||||
if (enc != enc2 && enc != rb_ascii8bit_encoding()) {
|
||||
c = rb_str_conv_enc(c, enc2, enc);
|
||||
}
|
||||
}
|
||||
/* get logical position */
|
||||
lpos = 0; p = RSTRING_PTR(ptr->string); pend = p + ptr->pos - 1;
|
||||
|
@ -730,6 +734,19 @@ strio_ungetc(VALUE self, VALUE c)
|
|||
return Qnil;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* strio.ungetbyte(fixnum) -> nil
|
||||
*
|
||||
* See IO#ungetbyte
|
||||
*/
|
||||
static VALUE
|
||||
strio_ungetbyte(VALUE self, VALUE c)
|
||||
{
|
||||
NUM2INT(c);
|
||||
return strio_ungetc(self, c);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* strio.readchar -> fixnum
|
||||
|
@ -1318,6 +1335,7 @@ Init_stringio()
|
|||
rb_define_method(StringIO, "chars", strio_each_char, 0);
|
||||
rb_define_method(StringIO, "getc", strio_getc, 0);
|
||||
rb_define_method(StringIO, "ungetc", strio_ungetc, 1);
|
||||
rb_define_method(StringIO, "ungetbyte", strio_ungetbyte, 1);
|
||||
rb_define_method(StringIO, "readchar", strio_readchar, 0);
|
||||
rb_define_method(StringIO, "getbyte", strio_getbyte, 0);
|
||||
rb_define_method(StringIO, "readbyte", strio_readbyte, 0);
|
||||
|
|
|
@ -3075,8 +3075,11 @@ rb_gzreader_each_byte(VALUE obj)
|
|||
static VALUE
|
||||
rb_gzreader_ungetc(VALUE obj, VALUE s)
|
||||
{
|
||||
struct gzfile *gz = get_gzfile(obj);
|
||||
struct gzfile *gz;
|
||||
|
||||
if (FIXNUM_P(s))
|
||||
return rb_gzreader_ungetbyte(obj, s);
|
||||
gz = get_gzfile(obj);
|
||||
StringValue(s);
|
||||
if (gz->enc2 && gz->enc2 != rb_ascii8bit_encoding()) {
|
||||
s = rb_str_conv_enc(s, rb_enc_get(s), gz->enc2);
|
||||
|
|
Loading…
Reference in a new issue