Bug #12415

Dir#pos reports invalid position after Dir#read

Added by djberg96 (Daniel Berger) over 4 years ago. Updated over 4 years ago.

Target version:
ruby -v:
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]


irb(main):002:0> `ls`.split("\n")
=> ["bench", "berger_spec.gemspec", "lib", "Rakefile", "README", "SCORECARD", "test"]

irb(main):003:0> dir =
=> #<Dir:/home/dberger/Repositories/berger_spec>

irb(main):004:0> dir.pos
=> 0

irb(main):005:0> 5.times{ }
=> 5

irb(main):006:0> dir.pos
=> 3695892277965309219 # WUT

Updated by phasis68 (Heesob Park) over 4 years ago

This is not a bug.
The return value of Dir#pos is just the return value of telldir().
The return values of telldir() are implementation-defined.

According to

In glibc up to version 2.1.1, the return type of telldir() was off_t.
POSIX.1-2001 specifies long, and this is the type used since glibc

In early filesystems, the value returned by telldir() was a simple
file offset within a directory.  Modern filesystems use tree or hash
structures, rather than flat tables, to represent directories.  On
such filesystems, the value returned by telldir() (and used
internally by readdir(3)) is a "cookie" that is used by the
implementation to derive a position within a directory.  Application
programs should treat this strictly as an opaque value, making no
assumptions about its contents.

Updated by nobu (Nobuyoshi Nakada) over 4 years ago

  • Status changed from Open to Rejected

Also available in: Atom PDF