diff --git a/ChangeLog b/ChangeLog index 7978a4e247..75156c2efd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +Fri Oct 5 15:40:04 2007 Akinori MUSHA + + * lib/tempfile.rb (Tempfile::make_tmpname): Allow to specify a + suffix for a temporary file name. + + * lib/tempfile.rb (Tempfile::make_tmpname): Make temporary file + names less predictable by including a random string. + [inspired by: akr] + Tue Oct 2 21:20:14 2007 NAKAMURA Usaku * win32/win32.c (make_cmdvector): adjust escaped successive diff --git a/lib/tempfile.rb b/lib/tempfile.rb index b885444b15..f87c5fd394 100644 --- a/lib/tempfile.rb +++ b/lib/tempfile.rb @@ -13,9 +13,15 @@ class Tempfile < DelegateClass(File) MAX_TRY = 10 @@cleanlist = [] - # Creates a temporary file of mode 0600 in the temporary directory - # whose name is basename.pid.n and opens with mode "w+". A Tempfile - # object works just like a File object. + # Creates a temporary file of mode 0600 in the temporary directory, + # opens it with mode "w+", and returns a Tempfile object which + # represents the created temporary file. A Tempfile object can be + # treated just like a normal File object. + # + # The basename parameter is used to determine the name of a + # temporary file. If an Array is given, the first element is used + # as prefix string and the second as suffix string, respectively. + # Otherwise it is treated as prefix string. # # If tmpdir is omitted, the temporary directory is determined by # Dir::tmpdir provided by 'tmpdir.rb'. @@ -67,7 +73,15 @@ class Tempfile < DelegateClass(File) end def make_tmpname(basename, n) - sprintf('%s.%d.%d', basename, $$, n) + case basename + when Array + prefix, suffix = *basename + else + prefix, suffix = basename, '' + end + + t = Time.now.strftime("%Y%m%d") + path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}-#{n}#{suffix}" end private :make_tmpname