From: cremno@... Date: 2015-07-29T18:43:43+00:00 Subject: [ruby-core:70174] [Ruby trunk - Feature #11258] add 'x' mode character for O_EXCL 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/