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

Heesob Park phasis at gmail.com
Mon Jul 28 21:17:17 EDT 2008


Hi,

2008/7/29 Daniel Berger <djberg96 at gmail.com>:
> Heesob Park wrote:
>>
>> 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.
>
> Yes, thanks. Also, there was some kind of bug in the multi_to_wide and
> wide_to_multi helper methods in Windows::Unicode. I've refactored those and
> updated win32-file-stat to use wide character functions internally. All
> tests pass now.
>
> I'll have to update win32-file next to use the wide character functions. I
> think there was one other bug (a bad error message somewhere) I need to fix,
> too.
>
That's the same problem.
If you modify FormatMessage to FormatMessageA (#423 of error.rb),
It works fine.

Regards,

Park Heesob


More information about the win32utils-devel mailing list