[Rubygems-developers] [ rubygems-Bugs-27327 ] RubyGems does not work properly with upcomming Ruby 1.9.2

noreply at rubyforge.org noreply at rubyforge.org
Wed Oct 21 12:52:05 EDT 2009


Bugs item #27327, was opened at 2009-10-21 15:20
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=575&aid=27327&group_id=126

Category: #gem and #require methods
Group: v1.3.x
Status: Open
Resolution: None
Priority: 3
Submitted By: Vít Ondruch (voxik)
Assigned to: Nobody (None)
Summary: RubyGems does not work properly with upcomming Ruby 1.9.2

Initial Comment:
With ruby ruby 1.9.2dev (2009-10-07) [i386-mswin32_90], coming from win32-unicode-test branch, RubyGems does not work properly anymore. The problem is in initialization of system_config_path variable. The original code is:

  system_config_path =
    begin
      require 'Win32API'

      CSIDL_COMMON_APPDATA = 0x0023
      path = 0.chr * 260
      SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPath', 'PLPLP', 'L',
                                     :stdcall
      SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path

      path.strip
    rescue LoadError
      '/etc'
    end

but it should be replaced by the following version:

  system_config_path =
    begin
      require 'Win32API'

      CSIDL_COMMON_APPDATA = 0x0023
      path = 0.chr * 260
      SHGetFolderPath = Win32API.new 'shell32', 'SHGetFolderPathW', 'PLPLP', 'L',
                                     :stdcall
      SHGetFolderPath.call nil, CSIDL_COMMON_APPDATA, nil, 1, path

      path.force_encoding('UTF-16LE').encode!('UTF-8')
      path.strip
    rescue LoadError
      '/etc'
    end

i.e. the wide version of SHGetFolderPath should be used. However this code should be probably specific for specific Ruby versions.

The problem can be reproduced for example on czech windows XP, where the method SHGetFolderPath returns following string: "c:\Documents and Settings\All Users\Data aplikací" ("c:\Documents and Settings\All Users\Application data" in EN windows), with US-ASCII encoding, which is completely wrong.

----------------------------------------------------------------------

Comment By: Nikolai Weibull (pcp)
Date: 2009-10-21 18:52

Message:
Also, use dl instead of Win32API, as Win32API is deprecated.

And Luis, why not have one case for 1.8 and one for 1.9 here?

----------------------------------------------------------------------

Comment By: Luis Lavena (luislavena)
Date: 2009-10-21 16:52

Message:
You're correct.

We can't implement Wide characters API as Ruby 1.8 do not support encoding in the same way 1.9 does.

A workaround will be use Win32API completely for the encoding translation, but I'm having hard time finding that right now.


----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=575&aid=27327&group_id=126


More information about the Rubygems-developers mailing list