[前][次][番号順一覧][スレッド一覧]

ruby-changes:6131

From: nobu <ko1@a...>
Date: Sun, 29 Jun 2008 09:44:06 +0900 (JST)
Subject: [ruby-changes:6131] Ruby:r17643 (ruby_1_8, trunk): * lib/tmpdir.rb (@@systmpdir): prior LOCAL_APPDATA if possible, and

nobu	2008-06-29 09:43:12 +0900 (Sun, 29 Jun 2008)

  New Revision: 17643

  Modified files:
    branches/ruby_1_8/ChangeLog
    branches/ruby_1_8/lib/tmpdir.rb
    trunk/ChangeLog
    trunk/lib/tmpdir.rb

  Log:
    * 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]


  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/lib/tmpdir.rb?r1=17643&r2=17642&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/branches/ruby_1_8/ChangeLog?r1=17643&r2=17642&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=17643&r2=17642&diff_format=u
  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/tmpdir.rb?r1=17643&r2=17642&diff_format=u

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 17642)
+++ ChangeLog	(revision 17643)
@@ -1,3 +1,9 @@
+Sun Jun 29 09:43:10 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* 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]
+
 Sun Jun 29 07:53:08 2008  Masaki Suketa  <masaki.suketa@n...>
 
 	* ext/win32ole/win32ole.c (date2time_str): fix the overflow in
Index: lib/tmpdir.rb
===================================================================
--- lib/tmpdir.rb	(revision 17642)
+++ lib/tmpdir.rb	(revision 17643)
@@ -12,16 +12,23 @@
 
   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
@@ -41,8 +48,8 @@
 	  break
 	end
       end
+      File.expand_path(tmp)
     end
-    File.expand_path(tmp)
   end
 
   # Dir.mktmpdir creates a temporary directory.
Index: ruby_1_8/ChangeLog
===================================================================
--- ruby_1_8/ChangeLog	(revision 17642)
+++ ruby_1_8/ChangeLog	(revision 17643)
@@ -1,3 +1,9 @@
+Sun Jun 29 09:43:10 2008  Nobuyoshi Nakada  <nobu@r...>
+
+	* 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]
+
 Sun Jun 29 08:03:08 2008  Masaki Suketa  <masaki.suketa@n...>
 
 	* ext/win32ole/win32ole.c (date2time_str): fix the overflow in
Index: ruby_1_8/lib/tmpdir.rb
===================================================================
--- ruby_1_8/lib/tmpdir.rb	(revision 17642)
+++ ruby_1_8/lib/tmpdir.rb	(revision 17643)
@@ -12,16 +12,23 @@
 
   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
@@ -41,8 +48,8 @@
 	  break
 	end
       end
+      File.expand_path(tmp)
     end
-    File.expand_path(tmp)
   end
 
   # Dir.mktmpdir creates a temporary directory.

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]