Hi,
2012/8/14 usa (Usaku NAKAMURA) usa@garbagecollect.jp
Issue #6851 has been updated by usa (Usaku NAKAMURA).
Hopefully, fixed.
I added some test cases.
Please point out, if I have an oversight.
Bug #6851: Result of File.stat("c:/...") is different from 1.9.3
https://bugs.ruby-lang.org/issues/6851#change-28859
Author: phasis68 (Heesob Park)
Status: Closed
Priority: Normal
Assignee: usa (Usaku NAKAMURA)
Category: core
Target version: 2.0.0
ruby -v: ruby 2.0.0dev (2012-08-10 trunk 36676) [i386-mswin32_100]
What is the correct result of File.stat("c:/...") on Windows?
File#stat for path like "c:/..." succeeds on trunk 36676.
C:>ruby -ve 'p File.stat("c:/...")'
ruby 2.0.0dev (2012-08-10 trunk 36676) [i386-mswin32_100]
#<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=
0, blksize=nil, blocks=nil, atime=2012-08-10 14:53:27 +0900, mtime=2012-08-10 09
:40:33 +0900, ctime=2011-04-08 19:43:44 +0900>
C:>ruby -ve 'p File.stat("c:/....")'
ruby 2.0.0dev (2012-08-10 trunk 36676) [i386-mswin32_100]
#<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=
0, blksize=nil, blocks=nil, atime=2012-08-10 14:53:32 +0900, mtime=2012-08-10 09
:40:33 +0900, ctime=2011-04-08 19:43:44 +0900>
C:>ruby -ve 'p File.stat("c:/..../..")'
ruby 2.0.0dev (2012-08-10 trunk 36676) [i386-mswin32_100]
#<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=
0, blksize=nil, blocks=nil, atime=2012-08-10 14:53:45 +0900, mtime=2012-08-10 09
:40:33 +0900, ctime=2011-04-08 19:43:44 +0900>
But, File#stat raises exception on Ruby 1.9.3.
C:\Ruby193\bin>ruby -ve 'p File.stat("c:/...")
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]
-e:1:in stat': Invalid argument - c:/... (Errno::EINVAL) from -e:1:in
'
C:\Ruby193\bin>ruby -ve 'p File.stat("c:/....")
ruby 1.9.3p194 (2012-04-20 revision 35410) [i386-mingw32]
-e:1:in stat': No such file or directory - c:/.... (Errno::ENOENT) from -e:1:in
'
I confirmed the bug is fixed.
I found another odd behavior of File#stat.
File#stat of some directory + ".." always works on Windows even if the
directory is not exists.
C:\work>ruby -e 'p File.stat("./notexist")'
-e:1:in stat': No such file or directory - ./notexist (Errno::ENOENT) from -e:1:in
'
C:\work>ruby -e 'p File.stat("./notexist/..")'
#<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=
0, blksize=nil, blocks=nil, atime=2012-08-14 16:44:54 +0900, mtime=2012-08-13 19
:28:30 +0900, ctime=2011-06-07 16:06:03 +0900>
C:\work>ruby -e 'p File.stat("../notexist")'
-e:1:in stat': No such file or directory - ../notexist (Errno::ENOENT) from -e:1:in
'
C:\work>ruby -e 'p File.stat("../notexist/..")'
#<File::Stat dev=0x2, ino=0, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=
0, blksize=nil, blocks=nil, atime=2012-08-14 16:45:37 +0900, mtime=2012-08-10 09
:40:33 +0900, ctime=2011-04-08 19:43:44 +0900>
Here is Linux behavior.
[tmp]$ ruby -ve 'File.stat("./notexist")'
ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux]
-e:1:in stat': No such file or directory - ./notexist (Errno::ENOENT) from -e:1 [tmp]$ ruby -ve 'File.stat("./notexist/..")' ruby 1.8.7 (2011-02-18 patchlevel 334) [x86_64-linux] -e:1:in
stat': No such file or directory - ./notexist/.. (Errno::ENOENT)
from -e:1
Is this a bug or feature?
Regards,
Park Heesob