summaryrefslogtreecommitdiff
path: root/io.c
diff options
context:
space:
mode:
Diffstat (limited to 'io.c')
-rw-r--r--io.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/io.c b/io.c
index 01ff8c9d0f..87cd6a8b5e 100644
--- a/io.c
+++ b/io.c
@@ -2183,6 +2183,9 @@ rb_io_flags_mode(flags)
case FMODE_WRITABLE:
return MODE_BINMODE("w", "wb");
case FMODE_READWRITE:
+ if (flags & FMODE_CREATE) {
+ return MODE_BINMODE("w+", "wb+");
+ }
return MODE_BINMODE("r+", "rb+");
}
rb_raise(rb_eArgError, "illegal access mode %o", flags);
@@ -2201,10 +2204,10 @@ rb_io_mode_flags(mode)
flags |= FMODE_READABLE;
break;
case 'w':
- flags |= FMODE_WRITABLE;
+ flags |= FMODE_WRITABLE | FMODE_CREATE;
break;
case 'a':
- flags |= FMODE_WRITABLE | FMODE_APPEND;
+ flags |= FMODE_WRITABLE | FMODE_APPEND | FMODE_CREATE;
break;
default:
error: