From: phasis@... Date: 2016-05-23T06:05:57+00:00 Subject: [ruby-core:75686] [Ruby trunk Bug#12415] Dir#pos reports invalid position after Dir#read 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) => # 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: