Issue #11258 has been updated by cremno phobia.

File excl_mode_v2.diff added

Nobuyoshi Nakada wrote:
> > ~~~diff
> > +#define MODE_BINARY_EXCL(a,b,c,d) \
> > + ((oflags & O_EXCL) ? MODE_BINARY(d, c) : MODE_BINARY(b, a))
> 
> 'a', 'b' and 'c', 'd' are inverted?

Yes, MODE_BINARY confused me (it uses it arguments in reverse order). I think `MODE_BINARY_EXCL` is a bad idea anyway. In V2 an ArgumentError is raised by `rb_io_oflags_modestr()` when `O_EXCL` is set. This also affects the related `flags: File::EXCL` feature. `$stdout.reopen('stdout', 'w', flags: File::EXCL)` does now raise as it should since `freopen()` might not support `x` which could cause the truncation of an existing file! That might not be the best solution though.

V2 also contains documentation and a news entry.

----------------------------------------
Feature #11258: add 'x' mode character for O_EXCL
https://bugs.ruby-lang.org/issues/11258#change-53602

* Author: cremno phobia
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
I just saw #11253 which contains:

>But some modes has only integer form like O_CLOEXEC, O_EXCL.

However C11 added `x` to open a file for exclusive access. It's also supported by Python.

http://port70.net/~nsz/c/c11/n1570.html#7.21.5.3p5
https://docs.python.org/3.3/library/functions.html#open

---Files--------------------------------
excl_mode_v1.diff (3.46 KB)
excl_mode_v2.diff (4.41 KB)


-- 
https://bugs.ruby-lang.org/