Forum: Ruby Ruby & Windows and Dir() EINVAL bug?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
unknown (Guest)
on 2009-01-08 19:45
(Received via mailing list)
Hello,

I am using Ruby 1.8.6-26 on Windows. I have this little test script:

******************************************************************************************
system("dir x:\\.\\Radeloff\\Projects\\DATA\\NLCD_2001\\landcover\
\nlcd_fg11")

serverDirName = "x:/./Radeloff/Projects/DATA_NLCD_2001/landcover/
nlcd_fg11"

Dir.new(serverDirName).each do | dirEntry |
  if inHere.nil?
    print "Found the directory #{serverDirName} just fine!\n"
    inHere = true
  end
end
******************************************************************************************

The first line succeeds. The Dir.new() line bombs out with
Errno::EINVAL.Note that the Dir.new() code was taken out of a working
script that works for millions of files and directories except this
one. The funky "x:/./..." stuff works all the time. I have looked at
file permissions on the directory in question and it matches other
directories in the same place that work fine.

Can anyone tell me what could be wrong here? Could this be a Ruby bug?
Daniel B. (Guest)
on 2009-01-08 20:36
(Received via mailing list)
On Jan 8, 10:44 am, removed_email_address@domain.invalid wrote:
>
> script that works for millions of files and directories except this
> one. The funky "x:/./..." stuff works all the time. I have looked at
> file permissions on the directory in question and it matches other
> directories in the same place that work fine.
>
> Can anyone tell me what could be wrong here? Could this be a Ruby bug?

It's not being caused by the '.'. I just tried it:

irb(main):002:0> Dir.new("C:/staging").each{ |f| p f }
"."
".."
"ptools-1.1.6"
"windows-pr-0.9.8"
"windows-pr-0.9.8.zip"
=> #<Dir:0x2e37ea0>
irb(main):003:0> Dir.new("C:/./staging").each{ |f| p f }
"."
".."
"ptools-1.1.6"
"windows-pr-0.9.8"
"windows-pr-0.9.8.zip"
=> #<Dir:0x2e32874>

BTW, you can shortcut Dir.new(dir).each with Dir.foreach(dir),
although I don't think it will solve your problem.

Regards,

Dan
Greg H. (Guest)
on 2009-01-08 22:33
> system("dir x:\\.\\Radeloff\\Projects\\DATA\\NLCD_2001\\landcover\
> \nlcd_fg11")
>
> serverDirName = "x:/./Radeloff/Projects/DATA_NLCD_2001/landcover/
> nlcd_fg11"
>

was the error a typo? should it have been:

 serverDirName = "x:/./Radeloff/Projects/DATA/NLCD_2001/landcover/
 nlcd_fg11"
unknown (Guest)
on 2009-01-08 22:45
(Received via mailing list)
On Jan 8, 2:33 pm, Greg H. <removed_email_address@domain.invalid> wrote:
> --
> Posted viahttp://www.ruby-forum.com/.

Arg. Yes and no. My test program did have a typo. Once fixed the test
program works.

Unfortunately the actual script it was taken from is typoless and I'm
still at a loss for why it crashes. I'm not specifying this directory.
Its being built from the Dir above it. I have so many files that it
takes days to get to this directory before the crash. Thus I'm having
trouble debugging it. (I also don't think this is the only directory
it crashes on like this but I haven't tracked it carefully to know)

The only thing I forgot to mention is that this is running on Server
2003 64-bit.
Daniel B. (Guest)
on 2009-01-09 01:55
(Received via mailing list)
removed_email_address@domain.invalid wrote:
>> Posted viahttp://www.ruby-forum.com/.
>
> The only thing I forgot to mention is that this is running on Server
> 2003 64-bit.

Try wrapping the offending code in a begin/rescue and see if you can
glean anything from the backtrace.

begin
    your_code
rescue Errno::EINVAL => err
    log(file)
    log(err.backtrace.join("\n")
    raise
end

Regards,

Dan
This topic is locked and can not be replied to.