mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Add Tempfile#close!() as a shorthand for Tempfile#close(true).
Add Tempfile#{unlink,delete}(). git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3177 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d9fbdddb59
commit
8451053741
2 changed files with 32 additions and 7 deletions
|
@ -1,3 +1,10 @@
|
||||||
|
Fri Dec 20 03:57:32 2002 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
|
* lib/tempfile.rb: Add Tempfile#close!() as a shorthand for
|
||||||
|
Tempfile#close(true).
|
||||||
|
|
||||||
|
* lib/tempfile.rb: Add Tempfile#{unlink,delete}().
|
||||||
|
|
||||||
Fri Dec 20 03:53:01 2002 Akinori MUSHA <knu@iDaemons.org>
|
Fri Dec 20 03:53:01 2002 Akinori MUSHA <knu@iDaemons.org>
|
||||||
|
|
||||||
* lib/README, lib/cgi/final.rb, lib/cgi/session.rb: Delete
|
* lib/README, lib/cgi/final.rb, lib/cgi/session.rb: Delete
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
# o When $SAFE > 0, you should specify a directory via the second argument
|
# o When $SAFE > 0, you should specify a directory via the second argument
|
||||||
# of Tempfile::new(), or it will end up finding an ENV value tainted and
|
# of Tempfile::new(), or it will end up finding an ENV value tainted and
|
||||||
# pick /tmp. In case you don't have it, an exception will be raised.
|
# pick /tmp. In case you don't have it, an exception will be raised.
|
||||||
# o Tempfile#close(true) gets the temporary file removed immediately.
|
# o Tempfile#close! gets the temporary file removed immediately.
|
||||||
# o Otherwise, the removal is delayed until the object is finalized.
|
# o Otherwise, the removal is delayed until the object is finalized.
|
||||||
# o With Tempfile#open, you can reopen the temporary file.
|
# o With Tempfile#open, you can reopen the temporary file.
|
||||||
# o The file mode for the temporary files is 0600.
|
# o The file mode for the temporary files is 0600.
|
||||||
|
@ -21,7 +21,7 @@
|
||||||
require 'delegate'
|
require 'delegate'
|
||||||
|
|
||||||
class Tempfile < SimpleDelegator
|
class Tempfile < SimpleDelegator
|
||||||
Max_try = 10
|
MAX_TRY = 10
|
||||||
@@cleanlist = []
|
@@cleanlist = []
|
||||||
|
|
||||||
def Tempfile.callback(data)
|
def Tempfile.callback(data)
|
||||||
|
@ -64,7 +64,7 @@ class Tempfile < SimpleDelegator
|
||||||
Dir.mkdir(lock)
|
Dir.mkdir(lock)
|
||||||
rescue
|
rescue
|
||||||
failure += 1
|
failure += 1
|
||||||
retry if failure < Max_try
|
retry if failure < MAX_TRY
|
||||||
raise "cannot generate tempfile `%s'" % tmpname
|
raise "cannot generate tempfile `%s'" % tmpname
|
||||||
ensure
|
ensure
|
||||||
Thread.critical = false
|
Thread.critical = false
|
||||||
|
@ -99,15 +99,33 @@ class Tempfile < SimpleDelegator
|
||||||
__setobj__(@tmpfile)
|
__setobj__(@tmpfile)
|
||||||
end
|
end
|
||||||
|
|
||||||
def close(real=false)
|
def _close
|
||||||
@tmpfile.close if @tmpfile
|
@tmpfile.close if @tmpfile
|
||||||
@data[1] = @tmpfile = nil
|
@data[1] = @tmpfile = nil
|
||||||
|
end
|
||||||
|
protected :_close
|
||||||
|
|
||||||
|
def close(real=false)
|
||||||
if real
|
if real
|
||||||
@clean_proc.call
|
close!
|
||||||
ObjectSpace.undefine_finalizer(self)
|
else
|
||||||
|
_close
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def close!
|
||||||
|
_close
|
||||||
|
@clean_proc.call
|
||||||
|
ObjectSpace.undefine_finalizer(self)
|
||||||
|
end
|
||||||
|
|
||||||
|
def unlink
|
||||||
|
# keep this order for thread safeness
|
||||||
|
File.unlink(@tmpname) if File.exist?(@tmpname)
|
||||||
|
@@cleanlist.delete(@tmpname) if @@cleanlist
|
||||||
|
end
|
||||||
|
alias delete unlink
|
||||||
|
|
||||||
def path
|
def path
|
||||||
@tmpname
|
@tmpname
|
||||||
end
|
end
|
||||||
|
@ -129,5 +147,5 @@ if __FILE__ == $0
|
||||||
f.close
|
f.close
|
||||||
f.open
|
f.open
|
||||||
p f.gets # => "foo\n"
|
p f.gets # => "foo\n"
|
||||||
f.close(true)
|
f.close!
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue