mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* ext/stringio/stringio.c (strio_getc): should returns
one-character string. * ext/stringio/stringio.c: remove unnecessary prototypes. * ext/stringio/stringio.c (strio_getbyte): new method. * ext/stringio/stringio.c (strio_readbyte): new method. * ext/stringio/stringio.c (strio_ungetc): should take a string as an input. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12934 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
333454e4dd
commit
c8c6ab229a
3 changed files with 85 additions and 75 deletions
14
ChangeLog
14
ChangeLog
|
@ -52,6 +52,20 @@ Mon Aug 13 13:21:58 2007 Tanaka Akira <akr@fsij.org>
|
|||
* lib/open-uri.rb: make ftp passive mode to avoid NAT problem.
|
||||
[ruby-dev:31377]
|
||||
|
||||
Mon Aug 13 09:18:05 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* ext/stringio/stringio.c (strio_getc): should returns
|
||||
one-character string.
|
||||
|
||||
* ext/stringio/stringio.c: remove unnecessary prototypes.
|
||||
|
||||
* ext/stringio/stringio.c (strio_getbyte): new method.
|
||||
|
||||
* ext/stringio/stringio.c (strio_readbyte): new method.
|
||||
|
||||
* ext/stringio/stringio.c (strio_ungetc): should take a string as
|
||||
an input.
|
||||
|
||||
Mon Aug 13 08:19:43 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* io.c (argf_close): always close via method.
|
||||
|
|
|
@ -28,14 +28,8 @@ struct StringIO {
|
|||
int count;
|
||||
};
|
||||
|
||||
static struct StringIO* strio_alloc _((void));
|
||||
static void strio_mark _((struct StringIO *));
|
||||
static void strio_free _((struct StringIO *));
|
||||
static struct StringIO* check_strio _((VALUE));
|
||||
static struct StringIO* get_strio _((VALUE));
|
||||
static struct StringIO* readable _((struct StringIO *));
|
||||
static struct StringIO* writable _((struct StringIO *));
|
||||
static void check_modifiable _((struct StringIO *));
|
||||
|
||||
#define IS_STRIO(obj) (RDATA(obj)->dmark == (RUBY_DATA_FUNC)strio_mark)
|
||||
#define error_inval(msg) (errno = EINVAL, rb_sys_fail(msg))
|
||||
|
@ -125,74 +119,12 @@ check_modifiable(struct StringIO *ptr)
|
|||
}
|
||||
}
|
||||
|
||||
static VALUE strio_s_allocate _((VALUE));
|
||||
static VALUE strio_s_open _((int, VALUE *, VALUE));
|
||||
static VALUE strio_initialize _((int, VALUE *, VALUE));
|
||||
static VALUE strio_finalize _((VALUE));
|
||||
static VALUE strio_self _((VALUE));
|
||||
static VALUE strio_false _((VALUE));
|
||||
static VALUE strio_nil _((VALUE));
|
||||
static VALUE strio_0 _((VALUE));
|
||||
static VALUE strio_first _((VALUE, VALUE));
|
||||
static VALUE strio_unimpl _((int, VALUE *, VALUE));
|
||||
static VALUE strio_get_string _((VALUE));
|
||||
static VALUE strio_set_string _((VALUE, VALUE));
|
||||
static VALUE strio_close _((VALUE));
|
||||
static VALUE strio_close_read _((VALUE));
|
||||
static VALUE strio_close_write _((VALUE));
|
||||
static VALUE strio_closed _((VALUE));
|
||||
static VALUE strio_closed_read _((VALUE));
|
||||
static VALUE strio_closed_write _((VALUE));
|
||||
static VALUE strio_eof _((VALUE));
|
||||
static VALUE strio_get_lineno _((VALUE));
|
||||
static VALUE strio_set_lineno _((VALUE, VALUE));
|
||||
static VALUE strio_get_pos _((VALUE));
|
||||
static VALUE strio_set_pos _((VALUE, VALUE));
|
||||
static VALUE strio_rewind _((VALUE));
|
||||
static VALUE strio_seek _((int, VALUE *, VALUE));
|
||||
static VALUE strio_get_sync _((VALUE));
|
||||
static VALUE strio_each_byte _((VALUE));
|
||||
static VALUE strio_getc _((VALUE));
|
||||
static VALUE strio_ungetc _((VALUE, VALUE));
|
||||
static VALUE strio_readchar _((VALUE));
|
||||
static VALUE strio_getline _((int, VALUE *, struct StringIO *));
|
||||
static VALUE strio_gets _((int, VALUE *, VALUE));
|
||||
static VALUE strio_readline _((int, VALUE *, VALUE));
|
||||
static VALUE strio_each _((int, VALUE *, VALUE));
|
||||
static VALUE strio_readlines _((int, VALUE *, VALUE));
|
||||
static VALUE strio_write _((VALUE, VALUE));
|
||||
static VALUE strio_putc _((VALUE, VALUE));
|
||||
static VALUE strio_read _((int, VALUE *, VALUE));
|
||||
static VALUE strio_size _((VALUE));
|
||||
static VALUE strio_truncate _((VALUE, VALUE));
|
||||
void Init_stringio _((void));
|
||||
|
||||
/* Boyer-Moore search: copied from regex.c */
|
||||
static void bm_init_skip _((long *, const char *, long));
|
||||
static long bm_search _((const char *, long, const char *, long, const long *));
|
||||
|
||||
static VALUE
|
||||
strio_s_allocate(klass)
|
||||
VALUE klass;
|
||||
strio_s_allocate(VALUE klass)
|
||||
{
|
||||
return Data_Wrap_Struct(klass, strio_mark, strio_free, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq: StringIO.open(string=""[, mode]) {|strio| ...}
|
||||
*
|
||||
* Equivalent to StringIO.new except that when it is called with a block, it
|
||||
* yields with the new instance and closes it, and returns the result which
|
||||
* returned from the block.
|
||||
*/
|
||||
static VALUE
|
||||
strio_s_open(int argc, VALUE *argv, VALUE klass)
|
||||
{
|
||||
VALUE obj = rb_class_new_instance(argc, argv, klass);
|
||||
if (!rb_block_given_p()) return obj;
|
||||
return rb_ensure(rb_yield, obj, strio_finalize, obj);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq: StringIO.new(string=""[, mode])
|
||||
*
|
||||
|
@ -252,6 +184,21 @@ strio_finalize(VALUE self)
|
|||
return self;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq: StringIO.open(string=""[, mode]) {|strio| ...}
|
||||
*
|
||||
* Equivalent to StringIO.new except that when it is called with a block, it
|
||||
* yields with the new instance and closes it, and returns the result which
|
||||
* returned from the block.
|
||||
*/
|
||||
static VALUE
|
||||
strio_s_open(int argc, VALUE *argv, VALUE klass)
|
||||
{
|
||||
VALUE obj = rb_class_new_instance(argc, argv, klass);
|
||||
if (!rb_block_given_p()) return obj;
|
||||
return rb_ensure(rb_yield, obj, strio_finalize, obj);
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns +false+. Just for compatibility to IO.
|
||||
*/
|
||||
|
@ -662,6 +609,27 @@ strio_each_byte(VALUE self)
|
|||
*/
|
||||
static VALUE
|
||||
strio_getc(VALUE self)
|
||||
{
|
||||
struct StringIO *ptr = readable(StringIO(self));
|
||||
int c;
|
||||
char ch;
|
||||
|
||||
if (ptr->pos >= RSTRING_LEN(ptr->string)) {
|
||||
return Qnil;
|
||||
}
|
||||
c = RSTRING_PTR(ptr->string)[ptr->pos++];
|
||||
ch = c & 0xff;
|
||||
return rb_str_new(&ch, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* strio.getbyte -> fixnum or nil
|
||||
*
|
||||
* See IO#getbyte.
|
||||
*/
|
||||
static VALUE
|
||||
strio_getbyte(VALUE self)
|
||||
{
|
||||
struct StringIO *ptr = readable(StringIO(self));
|
||||
int c;
|
||||
|
@ -691,7 +659,7 @@ strio_extend(struct StringIO *ptr, long pos, long len)
|
|||
|
||||
/*
|
||||
* call-seq:
|
||||
* strio.ungetc(integer) -> nil
|
||||
* strio.ungetc(string) -> nil
|
||||
*
|
||||
* Pushes back one character (passed as a parameter) onto *strio*
|
||||
* such that a subsequent buffered read will return it. Pushing back
|
||||
|
@ -700,12 +668,23 @@ strio_extend(struct StringIO *ptr, long pos, long len)
|
|||
* In other case, there is no limitation for multiple pushbacks.
|
||||
*/
|
||||
static VALUE
|
||||
strio_ungetc(VALUE self, VALUE ch)
|
||||
strio_ungetc(VALUE self, VALUE c)
|
||||
{
|
||||
struct StringIO *ptr = readable(StringIO(self));
|
||||
int cc = NUM2INT(ch);
|
||||
int cc;
|
||||
long len, pos = ptr->pos;
|
||||
|
||||
if (NIL_P(c)) return Qnil;
|
||||
if (FIXNUM_P(c)) {
|
||||
cc = FIX2INT(c);
|
||||
}
|
||||
else {
|
||||
SafeStringValue(c);
|
||||
if (RSTRING_LEN(c) > 1) {
|
||||
rb_warn("IO#ungetc pushes back only one byte");
|
||||
}
|
||||
cc = (unsigned char)RSTRING_PTR(c)[0];
|
||||
}
|
||||
if (cc != EOF && pos > 0) {
|
||||
if ((len = RSTRING_LEN(ptr->string)) < pos-- ||
|
||||
(unsigned char)RSTRING_PTR(ptr->string)[pos] !=
|
||||
|
@ -733,6 +712,21 @@ strio_readchar(VALUE self)
|
|||
return c;
|
||||
}
|
||||
|
||||
/*
|
||||
* call-seq:
|
||||
* strio.readbyte -> fixnum
|
||||
*
|
||||
* See IO#readbyte.
|
||||
*/
|
||||
static VALUE
|
||||
strio_readbyte(VALUE self)
|
||||
{
|
||||
VALUE c = strio_getbyte(self);
|
||||
if (NIL_P(c)) rb_eof_error();
|
||||
return c;
|
||||
}
|
||||
|
||||
/* Boyer-Moore search: copied from regex.c */
|
||||
static void
|
||||
bm_init_skip(long *skip, const char *pat, long m)
|
||||
{
|
||||
|
@ -1216,6 +1210,8 @@ Init_stringio()
|
|||
rb_define_method(StringIO, "getc", strio_getc, 0);
|
||||
rb_define_method(StringIO, "ungetc", strio_ungetc, 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);
|
||||
rb_define_method(StringIO, "gets", strio_gets, -1);
|
||||
rb_define_method(StringIO, "readline", strio_readline, -1);
|
||||
rb_define_method(StringIO, "readlines", strio_readlines, -1);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#define RUBY_VERSION "1.9.0"
|
||||
#define RUBY_RELEASE_DATE "2007-08-14"
|
||||
#define RUBY_RELEASE_DATE "2007-08-15"
|
||||
#define RUBY_VERSION_CODE 190
|
||||
#define RUBY_RELEASE_CODE 20070814
|
||||
#define RUBY_RELEASE_CODE 20070815
|
||||
#define RUBY_PATCHLEVEL 0
|
||||
|
||||
#define RUBY_VERSION_MAJOR 1
|
||||
|
@ -9,7 +9,7 @@
|
|||
#define RUBY_VERSION_TEENY 0
|
||||
#define RUBY_RELEASE_YEAR 2007
|
||||
#define RUBY_RELEASE_MONTH 8
|
||||
#define RUBY_RELEASE_DAY 14
|
||||
#define RUBY_RELEASE_DAY 15
|
||||
|
||||
#ifdef RUBY_EXTERN
|
||||
RUBY_EXTERN const char ruby_version[];
|
||||
|
|
Loading…
Reference in a new issue