diff options
author | sorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-08-31 11:14:36 +0000 |
---|---|---|
committer | sorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-08-31 11:14:36 +0000 |
commit | 75cda5e22f6bc7ba6c91b6501d4233e782178a3a (patch) | |
tree | 64a4779a153f45831864a390ef84eb025fe1d4e4 /test/ruby | |
parent | 5f3c228f3975e4f4023168af2fba9f7434a904c5 (diff) |
File#path: Raise IOError when a file is O_TMPFILE
File#path for a file opened with O_TMPFILE has no meaning.
A filepath returned by this method isn't guarranteed about its accuracy,
but files opened with O_TMPFILE are known its recorded path has no
meaning. So let them not to return any pathname.
After a discussion in ruby-core, just returning Qnil makes guessing the
root cause difficult. Instead, this patch makes the method to raise an
error.
Other consideration is calling fnctl(2) on rb_file_path, but it adds a
overhead, and it's difficult to determine O_TMPFILE status after fd has
been closed.
[Feature #13568]
* io.c(rb_file_open_generic): Set Qnil to fptr->pathv when opening a
file using O_TMPFILE
* file.c(rb_file_path): Raise IOError when fptr->pathv is Qnil
* file.c(rb_file_path): [DOC] Update for the new behavior
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59704 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby')
-rw-r--r-- | test/ruby/test_file.rb | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/test/ruby/test_file.rb b/test/ruby/test_file.rb index 58a4240391..bb366ce81f 100644 --- a/test/ruby/test_file.rb +++ b/test/ruby/test_file.rb @@ -468,4 +468,16 @@ class TestFile < Test::Unit::TestCase assert_file.not_exist?(path) end end + + def test_open_tempfile_path + Dir.mktmpdir(__method__.to_s) do |tmpdir| + File.open(tmpdir, File::RDWR | File::TMPFILE) do |io| + io.write "foo" + io.flush + assert_equal 3, io.size + assert_raise(IOError) { io.path } + end + end + end if File::Constants.const_defined?(:TMPFILE) + end |