diff options
author | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-02 09:22:26 +0000 |
---|---|---|
committer | shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-07-02 09:22:26 +0000 |
commit | c22420d58f6306b8f58e016aef85dcc34b8ed57d (patch) | |
tree | 0d05fd47726db7fea793fd726217590c4d7d9c41 /lib | |
parent | b3afdd14bb46cffa3dcde1d57e04899e15659916 (diff) |
merge revision(s) 17643:
* lib/tmpdir.rb (@@systmpdir): prior LOCAL_APPDATA if possible, and
should be clean. based on a patch from arton <artonx AT
yahoo.co.jp> at [ruby-dev:35269]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8_6@17799 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib')
-rw-r--r-- | lib/tmpdir.rb | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/lib/tmpdir.rb b/lib/tmpdir.rb index 434d1bf053..7f9fd9a543 100644 --- a/lib/tmpdir.rb +++ b/lib/tmpdir.rb @@ -10,16 +10,23 @@ class Dir begin require 'Win32API' + CSIDL_LOCAL_APPDATA = 0x001c max_pathlen = 260 windir = ' '*(max_pathlen+1) begin - getdir = Win32API.new('kernel32', 'GetSystemWindowsDirectory', 'PL', 'L') + getdir = Win32API.new('shell32', 'SHGetFolderPath', 'LLLLP', 'L') + raise RuntimeError if getdir.call(0, CSIDL_LOCAL_APPDATA, 0, 0, windir) != 0 + windir = File.expand_path(windir.rstrip) rescue RuntimeError - getdir = Win32API.new('kernel32', 'GetWindowsDirectory', 'PL', 'L') + begin + getdir = Win32API.new('kernel32', 'GetSystemWindowsDirectory', 'PL', 'L') + rescue RuntimeError + getdir = Win32API.new('kernel32', 'GetWindowsDirectory', 'PL', 'L') + end + len = getdir.call(windir, windir.size) + windir = File.expand_path(windir[0, len]) end - len = getdir.call(windir, windir.size) - windir = File.expand_path(windir[0, len]) - temp = File.join(windir, 'temp') + temp = File.join(windir.untaint, 'temp') @@systmpdir = temp if File.directory?(temp) and File.writable?(temp) rescue LoadError end @@ -39,7 +46,7 @@ class Dir break end end + File.expand_path(tmp) end - File.expand_path(tmp) end end |