Issue #13568 has been updated by shyouhei (Shyouhei Urabe).


nobu (Nobuyoshi Nakada) wrote:
> shyouhei (Shyouhei Urabe) wrote:
> > At the meeting we discussed the use case of `File#path` and we thought there are 2 kinds:
> > 
> > - Pass it to `open()`
> > - Pass it to `printf()` or variant
> 
> A correction; The method which `open` calls is `to_path`, not `path`.
> These are different.

Yes, I'm talking about File#path.  Situations like [ruby-core:81167] is in my mind.  #to_path is a separate issue.

> > Do you think `nil` is better?  I think nonexistent path is far more descriptive.
> 
> The write mode problem is a matter.
> It would silently (and wrongly) success to write.

What about adding a slash then? like:

```
irb(main):001:0> open("/tmp/#165106976 (deleted / nonexistent)", "w")
Errno::ENOENT: No such file or directory @ rb_sysopen - /tmp/#165106976 (deleted / nonexistent)
        from (irb):1:in `initialize'
        from (irb):1:in `open'
```

> I think that `File#to_path` should raise if the path dost not exist, but untouch `File#path`.

For #to_path, go to #13576.  This issue is about #path, and I think adding description is the best known solution; leave it untouched does not save anything.

----------------------------------------
Feature #13568: File#path for O_TMPFILE fds are unmeaning
https://bugs.ruby-lang.org/issues/13568#change-65014

* Author: sorah (Sorah Fukumori)
* Status: Assigned
* Priority: Normal
* Assignee: sorah (Sorah Fukumori)
* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>