1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/lib/tmpdir.rb
shyouhei c22420d58f 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
2008-07-02 09:22:26 +00:00

52 lines
1.3 KiB
Ruby

#
# tmpdir - retrieve temporary directory path
#
# $Id$
#
class Dir
@@systmpdir = '/tmp'
begin
require 'Win32API'
CSIDL_LOCAL_APPDATA = 0x001c
max_pathlen = 260
windir = ' '*(max_pathlen+1)
begin
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
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
temp = File.join(windir.untaint, 'temp')
@@systmpdir = temp if File.directory?(temp) and File.writable?(temp)
rescue LoadError
end
##
# Returns the operating system's temporary file path.
def Dir::tmpdir
tmp = '.'
if $SAFE > 0
tmp = @@systmpdir
else
for dir in [ENV['TMPDIR'], ENV['TMP'], ENV['TEMP'],
ENV['USERPROFILE'], @@systmpdir, '/tmp']
if dir and File.directory?(dir) and File.writable?(dir)
tmp = dir
break
end
end
File.expand_path(tmp)
end
end
end