summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-20 08:25:03 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-12-20 08:25:03 +0000
commit1cc9c93ff9a699689cdef4b1254a70ca8559caaa (patch)
tree4a71a2838d258197aee63a23371721f11423700b /io.c
parent9b6e1a9f38ee299b7b2a2282ec7071d54a1494a4 (diff)
io.c: update argf lineno
* io.c (argf_rewind): rewind line number in non-global ARGF instance. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57125 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/io.c b/io.c
index 3da57a0b40..65254ff102 100644
--- a/io.c
+++ b/io.c
@@ -11098,11 +11098,19 @@ argf_set_pos(VALUE argf, VALUE offset)
static VALUE
argf_rewind(VALUE argf)
{
+ VALUE ret;
+ int old_lineno;
+
if (!next_argv()) {
rb_raise(rb_eArgError, "no stream to rewind");
}
ARGF_FORWARD(0, 0);
- return rb_io_rewind(ARGF.current_file);
+ old_lineno = RFILE(ARGF.current_file)->fptr->lineno;
+ ret = rb_io_rewind(ARGF.current_file);
+ if (!global_argf_p(argf)) {
+ ARGF.last_lineno = ARGF.lineno -= old_lineno;
+ }
+ return ret;
}
/*