From: her@... Date: 2017-05-15T11:45:03+00:00 Subject: [ruby-core:81167] [Ruby trunk Feature#13568] File#path for O_TMPFILE fds are unmeaning Issue #13568 has been updated by sorah (Sorah Fukumori). Let me explain about the background bit detail. The example I put in the previous post https://github.com/aws/aws-sdk-ruby/blob/v2.9.17/aws-sdk-core/lib/aws-sdk-core/checksums.rb#L15 is from aws-sdk-ruby gem. The core part of this example is like: ``` require 'digest/sha2' def upload(body) checksum = if body.kind_of?(IO) && body.path Digest::SHA256.file(body.path) else # ... end # ... end ``` As a user of this library, I can head the Errno::EISDIR like the following code using O_TMPFILE: ``` File.open('/tmp', File::RDWR | File::TMPFILE) do |io| upload io #=> Errno::EISDIR end ``` AFAIK There's no way to determine a File object is made with O_TMPFILE. Similar situations (path given by File#path doesn't exist or is not valid) also can be made by deleting file before closing fd. But path in File objects made by O_TMPFILE is completely sure that it doesn't point a file of the object itself, so I think returning String is meaningless from such objects. ---------------------------------------- Feature #13568: File#path for O_TMPFILE fds are unmeaning https://bugs.ruby-lang.org/issues/13568#change-64819 * Author: sorah (Sorah Fukumori) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- By using File::TMPFILE (O_TMPFILE) allows us to create a file without directory entries. While open(2) with O_TMPFILE don't create a file without directory entries, it still requires a directory name to determine a file system to create a file. Current Ruby implementation holds such directory names in fptr->pathv and retrievable via File#path. But such paths are useless and may raise errors. For example, some code [1] checks File#path availability then when available, it attempts to use the path to open a file in different fd, finally raises Errno::EISDIR. This patch changes File#path (fptr->pathv) not to return String if a fd is opened with O_TMPFILE. [1]: https://github.com/aws/aws-sdk-ruby/blob/v2.9.17/aws-sdk-core/lib/aws-sdk-core/checksums.rb#L15 ---Files-------------------------------- tmpfile-path.patch (1.96 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: