Project

General

Profile

Actions

Feature #11258

closed

add 'x' mode character for O_EXCL

Added by cremno (cremno phobia) almost 10 years ago. Updated over 6 years ago.

Status:
Closed
Target version:
-
[ruby-core:69568]

Description

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_v1.diff cremno (cremno phobia), 06/16/2015 06:47 PM
excl_mode_v2.diff (4.41 KB) excl_mode_v2.diff cremno (cremno phobia), 07/29/2015 06:35 PM

Related issues 1 (0 open1 closed)

Has duplicate Ruby - Feature #14007: open mode 'x' to raise error if file existsClosedActions

Updated by cremno (cremno phobia) almost 10 years ago

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?

Updated by normalperson (Eric Wong) almost 10 years ago

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...

Updated by normalperson (Eric Wong) almost 10 years ago

Eric Wong wrote:

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

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago

+#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?

Updated by matz (Yukihiro Matsumoto) over 9 years ago

It looks good to me.

Matz.

Updated by cremno (cremno phobia) over 9 years ago

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.

Actions #7

Updated by shyouhei (Shyouhei Urabe) over 7 years ago

  • Has duplicate Feature #14007: open mode 'x' to raise error if file exists added

Updated by ko1 (Koichi Sasada) over 6 years ago

  • Assignee set to znz (Kazuhiro NISHIYAMA)
Actions #9

Updated by znz (Kazuhiro NISHIYAMA) over 6 years ago

  • 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)

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0