[BUG] errno == 0 at IO#pos on DOSISH

e$B$J$+$@$G$9!#e(B

http://pc11.2ch.net/test/read.cgi/tech/1188014743/716 e$B$G8+3]$1$?e(B
e$B$N$G$9$,!“e(BDOSISHe$B$J%7%9%F%`$G2~9T%3!<%I$,e(BLFe$B$N%U%!%$%k$rFI$b$&$H$9e(B
e$B$k$H!”$*$+$7$J$3$H$K$J$k$h$&$G$9!#e(B

$ ./ruby -v -e ‘p ARGF.pos; p ARGF.eof?; p ARGF.pos’ COPYING
ruby 1.8.6 (2007-10-18 revision 13735) [i386-mingw32]
0
false
-e:1: [BUG] rb_sys_fail(COPYING) - errno == 0
ruby 1.8.6 (2007-10-18) [i386-mingw32]

$ ./ruby -v -e ‘p ARGF.getc; p ARGF.pos’ COPYING
ruby 1.8.6 (2007-10-18 revision 13735) [i386-mingw32]
82
-e:1: [BUG] rb_sys_fail(COPYING) - errno == 0
ruby 1.8.6 (2007-10-18) [i386-mingw32]

e$B$3$l$O!"e(BVC runtimee$B$Ne(Bstdioe$B$Oe(Btext modee$B$NJQ49$re(Bfile
descriptore$B%l%Ye(B
e$B%k$KG$$;$F$$$k$?$a!“e(Bfseek()e$B$NCf$G$O!”:o$i$l$?$+$bCN$l$J$$%G!<%?e(B
e$B$rN`?d$7$F7k2L$rJd@5$7$F$$$k$?$a$G$9!#e(B

e$B:,K\E*$K$O!“e(BVCe$B$Ne(Bstdioe$B$N@_7W$G$Oe(BCR+LFe$B0J30$N2~9T$r4^$`%U%!%$%k$KBPe(B
e$B$9$ke(Bseek/telle$B$NF0:n$OITDj$H$$$&$3$H$,$”$k$N$G$9$,!“0[>o=N;$7$Fe(B
e$B$7$^$&$N$O$“$s$^$j$J$N$G!”$H$j$"$($:e(Berrnoe$B$b%A%'%C%/$9$k$h$&$K$7e(B
e$B$F$
$/!”$H$$$&$N$O$I$&$G$7$g$&$+!#e(B

Index: io.c

— io.c (revision 13735)
+++ io.c (working copy)
@@ -246,4 +246,5 @@ flush_before_seek(fptr)
io_fflush(GetWriteFile(fptr), fptr);
}

  • errno = 0;
    return fptr;
    }
    @@ -669,5 +670,5 @@ rb_io_tell(io)
    GetOpenFile(io, fptr);
    pos = io_tell(fptr);
  • if (pos < 0) rb_sys_fail(fptr->path);
  • if (pos < 0 && errno) rb_sys_fail(fptr->path);
    return OFFT2NUM(pos);
    }
    @@ -684,5 +685,5 @@ rb_io_seek(io, offset, whence)
    GetOpenFile(io, fptr);
    pos = io_seek(fptr, pos, whence);
  • if (pos < 0) rb_sys_fail(fptr->path);
  • if (pos < 0 && errno) rb_sys_fail(fptr->path);
    clearerr(fptr->f);