summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--io.c4
-rw-r--r--ruby.c1
3 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index dd387da937..421ad444b3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+Wed Jan 21 21:43:50 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * io.c (rb_io_ungetbyte, rb_io_ungetc): allows nil to reset EOF
+ flag with ungetting nothing.
+
+ * ruby.c (load_file_internal): rests EOF flag to make possible to
+ load from stdin after reading data.
+
Wed Jan 21 15:32:15 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* io.c (rb_io_ungetbyte, rb_io_ungetc): clears EOF flag.
diff --git a/io.c b/io.c
index ee8bf7cb93..5555de7c26 100644
--- a/io.c
+++ b/io.c
@@ -2860,6 +2860,7 @@ rb_io_ungetbyte(VALUE io, VALUE b)
GetOpenFile(io, fptr);
rb_io_check_readable(fptr);
+ io_unset_eof(fptr);
if (NIL_P(b)) return Qnil;
if (FIXNUM_P(b)) {
char cc = FIX2INT(b);
@@ -2869,7 +2870,6 @@ rb_io_ungetbyte(VALUE io, VALUE b)
SafeStringValue(b);
}
io_ungetbyte(b, fptr);
- io_unset_eof(fptr);
return Qnil;
}
@@ -2897,6 +2897,7 @@ rb_io_ungetc(VALUE io, VALUE c)
GetOpenFile(io, fptr);
rb_io_check_readable(fptr);
+ io_unset_eof(fptr);
if (NIL_P(c)) return Qnil;
if (FIXNUM_P(c)) {
int cc = FIX2INT(c);
@@ -2926,7 +2927,6 @@ rb_io_ungetc(VALUE io, VALUE c)
else {
io_ungetbyte(c, fptr);
}
- io_unset_eof(fptr);
return Qnil;
}
diff --git a/ruby.c b/ruby.c
index 9bf79bdfb4..e43fc2c9e5 100644
--- a/ruby.c
+++ b/ruby.c
@@ -1581,6 +1581,7 @@ load_file_internal(VALUE arg)
rb_io_ungetbyte(f, c);
}
require_libraries(opt); /* Why here? unnatural */
+ rb_io_ungetbyte(f, Qnil);
}
if (opt->src.enc.index >= 0) {
enc = rb_enc_from_index(opt->src.enc.index);