Feature #11258
closed
Here is a preliminary patch that passes make test-all
(except for some RubyGems/SSL tests) on a glibc-based Linux (but I think some less common code might not work anymore on Windows and other platforms that don't implement x
but validate the mode string). Also rb_io_oflags_modestr()
didn't differentiate between w+
and r+
before - was that intended?
cremno@mail.ru wrote:
Issue #11258 has been updated by cremno phobia.
File excl_mode_v1.diff added
Here is a preliminary patch that passes make test-all
(except for
some RubyGems/SSL tests) on a glibc-based Linux (but I think some less
common code might not work anymore on Windows and other platforms that
don't implement x
but validate the mode string).
Haven't tested, but I like this feature for consistency with glibc
and Python.
Also rb_io_oflags_modestr()
didn't differentiate between w+
and r+
before - was that intended?
I hope not, but it may also be too late to change without breaking
existing code and causing major data loss...
Eric Wong normalperson@yhbt.net wrote:
cremno@mail.ru wrote:
Also rb_io_oflags_modestr()
didn't differentiate between w+
and r+
before - was that intended?
I hope not, but it may also be too late to change without breaking
existing code and causing major data loss...
Scratch that. I misremembered what rb_io_oflags_modestr did :x
+#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?
It looks good to me.
Matz.
Nobuyoshi Nakada wrote:
+#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.
- Has duplicate Feature #14007: open mode 'x' to raise error if file exists added
- Assignee set to znz (Kazuhiro NISHIYAMA)
- Status changed from Open to Closed
Applied in changeset trunk|r64245.
add 'x' mode character for O_EXCL
[Feature #11258]
Patch by cremno (cremno phobia)
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0