Issue #12415 has been updated by Heesob Park.


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 http://man7.org/linux/man-pages/man3/telldir.3.html

```
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
2.1.2.

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.
```


----------------------------------------
Bug #12415: Dir#pos reports invalid position after Dir#read
https://bugs.ruby-lang.org/issues/12415#change-58817

* Author: Daniel Berger
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
    irb(main):002:0> `ls`.split("\n")
    => ["bench", "berger_spec.gemspec", "lib", "Rakefile", "README", "SCORECARD", "test"]

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

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

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

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



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>