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 `<main>'
>
> 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 `<main>'
>
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 `<main>'

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 `<main>'

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