Feature #14007 ยป ruby-mode-x.diff
| include/ruby/io.h | ||
|---|---|---|
|
/* #define FMODE_NOREVLOOKUP 0x00000100 */
|
||
|
#define FMODE_TRUNC 0x00000800
|
||
|
#define FMODE_TEXTMODE 0x00001000
|
||
|
#define FMODE_EXCL 0x00002000
|
||
|
/* #define FMODE_PREP 0x00010000 */
|
||
|
#define FMODE_SETENC_BY_BOM 0x00100000
|
||
|
/* #define FMODE_UNIX 0x00200000 */
|
||
| io.c | ||
|---|---|---|
|
case 't':
|
||
|
fmode |= FMODE_TEXTMODE;
|
||
|
break;
|
||
|
case 'x':
|
||
|
if (fmode & FMODE_READABLE)
|
||
|
rb_raise(rb_eArgError, "can't use mode \"x\" with \"r\"");
|
||
|
fmode |= FMODE_EXCL;
|
||
|
break;
|
||
|
case '+':
|
||
|
fmode |= FMODE_READWRITE;
|
||
|
break;
|
||
| ... | ... | |
|
if (oflags & O_CREAT) {
|
||
|
fmode |= FMODE_CREATE;
|
||
|
}
|
||
|
if (oflags & O_EXCL) {
|
||
|
fmode |= FMODE_EXCL;
|
||
|
}
|
||
|
#ifdef O_BINARY
|
||
|
if (oflags & O_BINARY) {
|
||
|
fmode |= FMODE_BINMODE;
|
||
| ... | ... | |
|
if (fmode & FMODE_CREATE) {
|
||
|
oflags |= O_CREAT;
|
||
|
}
|
||
|
if (fmode & FMODE_EXCL) {
|
||
|
oflags |= O_EXCL;
|
||
|
}
|
||
|
#ifdef O_BINARY
|
||
|
if (fmode & FMODE_BINMODE) {
|
||
|
oflags |= O_BINARY;
|
||
| ... | ... | |
|
*
|
||
|
* "t" Text file mode
|
||
|
*
|
||
|
* "x" Exclusive open
|
||
|
* Creates a new file, or raises an error if the file
|
||
|
* exists. Mode "x" is available since Ruby 2.5.
|
||
|
*
|
||
|
* When the open mode of original IO is read only, the mode cannot be
|
||
|
* changed to be writable. Similarly, the open mode cannot be changed from
|
||
|
* write only to readable.
|
||
| spec/ruby/core/file/open_spec.rb | ||
|---|---|---|
|
File.exist?(@file).should == true
|
||
|
end
|
||
|
ruby_version_is "2.5" do
|
||
|
it "opens a file that no exists when use 'ax' mode" do
|
||
|
@fh = File.open(@nonexistent, 'ax') { |f| f }
|
||
|
@fh.should be_kind_of(File)
|
||
|
File.exist?(@file).should == true
|
||
|
end
|
||
|
it "opens a file that no exists when use 'wx' mode" do
|
||
|
@fh = File.open(@nonexistent, 'wx') { |f| f }
|
||
|
@fh.should be_kind_of(File)
|
||
|
File.exist?(@file).should == true
|
||
|
end
|
||
|
it "raises ArgumentError when use 'rx' mode" do
|
||
|
lambda {
|
||
|
File.open(@nonexistent, 'rx') { }
|
||
|
}.should raise_error(ArgumentError)
|
||
|
lambda {
|
||
|
File.open(@file, 'rx') { }
|
||
|
}.should raise_error(ArgumentError)
|
||
|
end
|
||
|
end
|
||
|
# Check the grants associated to the differents open modes combinations.
|
||
|
it "raises an ArgumentError exception when call with an unknown mode" do
|
||
|
lambda { File.open(@file, "q") }.should raise_error(ArgumentError)
|
||
| ... | ... | |
|
end
|
||
|
end
|
||
|
ruby_version_is "2.5" do
|
||
|
it "raises an Errno::EEXIST if the file exists when open with 'wx' mode" do
|
||
|
lambda {
|
||
|
File.open(@file, 'wx') { }
|
||
|
}.should raise_error(Errno::EEXIST)
|
||
|
end
|
||
|
it "raises an Errno::EEXIST if the file exists when open with 'ax' mode" do
|
||
|
lambda {
|
||
|
File.open(@file, 'ax') { }
|
||
|
}.should raise_error(Errno::EEXIST)
|
||
|
end
|
||
|
end
|
||
|
platform_is_not :windows do
|
||
|
describe "on a FIFO" do
|
||
|
before :each do
|
||