[Win32utils-devel] Rails, WEBrick, win32-file-stat issue

Heesob Park phasis at gmail.com
Sun Jul 27 22:50:21 EDT 2008


Hi,

2008/7/28 Daniel Berger <djberg96 at gmail.com>:
> Hi all,
>
> Please take a look at RubyForge bug #21272:
>
> http://rubyforge.org/tracker/index.php?func=detail&aid=21272&group_id=85&atid=411
>
> The easiest way to see this for yourself is to create a skeleton Rails app,
> add 'win32/file' to the config/environment.rb file, run "ruby
> script/server", and point your browser at http://localhost:3000.
>
> I've tried refactoring the get_file_type method in stat.rb like so:
>
> def get_file_type(file)
>   begin
>      handle = CreateFile(
>         file,
>         GENERIC_READ,
>         FILE_SHARE_READ,
>         nil,
>         OPEN_EXISTING,
>         FILE_FLAG_BACKUP_SEMANTICS, # Need this for directories
>         nil
>      )
>
>      error_num = GetLastError()
>
>      # Ignore errors caused by open/empty/used block devices. We raise
>      # a SystemCallError explicitly here in order to maintain
>      # compatibility with the FileUtils module.
>      if handle == INVALID_HANDLE_VALUE
>         unless error_num == ERROR_NOT_READY
>            raise SystemCallError, get_last_error(error_num)
>         end
>      end
>
>      file_type = GetFileType(handle)
>      error_num = GetLastError()
>
>      if file_type == FILE_TYPE_UNKNOWN && error_num != NO_ERROR
>         raise SystemCallError, get_last_error(error_num)
>      end
>   ensure
>      CloseHandle(handle)
>   end
> end
>
> But, that's still not fixing it. I've also tried wrapping it in a
> RUBY_CRITICAL block as well as an explicit wide version of CreateFile, along
> with a few different access flags, but I haven't had any luck yet so far.
>
> Any ideas?
>
I guess it is related with the Wide and Ansi API function detection problem.

After modification of stat.rb
#93 GetFileAttributes to GetFileAttributesA
#558 CreateFile to CreateFileA
works fine for me.

Regards,

Park Heesob


More information about the win32utils-devel mailing list