aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorsorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-31 11:14:36 +0000
committersorah <sorah@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-08-31 11:14:36 +0000
commit5214596a34e3eae16320d4590f3a7a8b352970f4 (patch)
tree64a4779a153f45831864a390ef84eb025fe1d4e4 /test
parentf1271a5b56a1e5a86a08438e186113f0269ec878 (diff)
downloadruby-5214596a34e3eae16320d4590f3a7a8b352970f4.tar.gz
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')
-rw-r--r--test/ruby/test_file.rb12
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