mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* include/ruby/io.h (FMODE_TRUNC): new constant.
* io.c (rb_io_mode_flags): set FMODE_TRUNC for "w". (rb_io_modenum_flags): set FMODE_TRUNC for O_TRUNC. (rb_io_flags_modenum): new function. (rb_io_mode_modenum): just use rb_io_mode_flags and rb_io_flags_modenum. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18713 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
77ba9a5f56
commit
b929da2a1e
3 changed files with 51 additions and 37 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
|||
Wed Aug 20 03:36:45 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* include/ruby/io.h (FMODE_TRUNC): new constant.
|
||||
|
||||
* io.c (rb_io_mode_flags): set FMODE_TRUNC for "w".
|
||||
(rb_io_modenum_flags): set FMODE_TRUNC for O_TRUNC.
|
||||
(rb_io_flags_modenum): new function.
|
||||
(rb_io_mode_modenum): just use rb_io_mode_flags and
|
||||
rb_io_flags_modenum.
|
||||
|
||||
Wed Aug 20 02:36:21 2008 Tanaka Akira <akr@fsij.org>
|
||||
|
||||
* io.c (fopen): macro for vms removed. fopen is not used now.
|
||||
|
|
|
@ -81,6 +81,7 @@ typedef struct rb_io_t {
|
|||
#define FMODE_DUPLEX 0x0020
|
||||
#define FMODE_APPEND 0x0040
|
||||
#define FMODE_CREATE 0x0080
|
||||
#define FMODE_TRUNC 0x0100
|
||||
#define FMODE_WSPLIT 0x0200
|
||||
#define FMODE_WSPLIT_INITIALIZED 0x0400
|
||||
|
||||
|
|
77
io.c
77
io.c
|
@ -3553,7 +3553,7 @@ rb_io_mode_flags(const char *mode)
|
|||
flags |= FMODE_READABLE;
|
||||
break;
|
||||
case 'w':
|
||||
flags |= FMODE_WRITABLE | FMODE_CREATE;
|
||||
flags |= FMODE_WRITABLE | FMODE_TRUNC | FMODE_CREATE;
|
||||
break;
|
||||
case 'a':
|
||||
flags |= FMODE_WRITABLE | FMODE_APPEND | FMODE_CREATE;
|
||||
|
@ -3601,6 +3601,9 @@ rb_io_modenum_flags(int mode)
|
|||
if (mode & O_APPEND) {
|
||||
flags |= FMODE_APPEND;
|
||||
}
|
||||
if (mode & O_TRUNC) {
|
||||
flags |= FMODE_TRUNC;
|
||||
}
|
||||
if (mode & O_CREAT) {
|
||||
flags |= FMODE_CREATE;
|
||||
}
|
||||
|
@ -3613,45 +3616,45 @@ rb_io_modenum_flags(int mode)
|
|||
return flags;
|
||||
}
|
||||
|
||||
int
|
||||
rb_io_flags_modenum(int flags)
|
||||
{
|
||||
int mode = 0;
|
||||
|
||||
switch (flags & FMODE_READWRITE) {
|
||||
case FMODE_READABLE:
|
||||
mode |= O_RDONLY;
|
||||
break;
|
||||
case FMODE_WRITABLE:
|
||||
mode |= O_WRONLY;
|
||||
break;
|
||||
case FMODE_READWRITE:
|
||||
mode |= O_RDWR;
|
||||
break;
|
||||
}
|
||||
|
||||
if (flags & FMODE_APPEND) {
|
||||
mode |= O_APPEND;
|
||||
}
|
||||
if (flags & FMODE_TRUNC) {
|
||||
mode |= O_TRUNC;
|
||||
}
|
||||
if (flags & FMODE_CREATE) {
|
||||
mode |= O_CREAT;
|
||||
}
|
||||
#ifdef O_BINARY
|
||||
if (flags & FMODE_BINMODE) {
|
||||
mode |= O_BINARY;
|
||||
}
|
||||
#endif
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
int
|
||||
rb_io_mode_modenum(const char *mode)
|
||||
{
|
||||
int flags = 0;
|
||||
const char *m = mode;
|
||||
|
||||
switch (*m++) {
|
||||
case 'r':
|
||||
flags |= O_RDONLY;
|
||||
break;
|
||||
case 'w':
|
||||
flags |= O_WRONLY | O_CREAT | O_TRUNC;
|
||||
break;
|
||||
case 'a':
|
||||
flags |= O_WRONLY | O_CREAT | O_APPEND;
|
||||
break;
|
||||
default:
|
||||
error:
|
||||
rb_raise(rb_eArgError, "invalid access mode %s", mode);
|
||||
}
|
||||
|
||||
while (*m) {
|
||||
switch (*m++) {
|
||||
case 'b':
|
||||
#ifdef O_BINARY
|
||||
flags |= O_BINARY;
|
||||
#endif
|
||||
break;
|
||||
case '+':
|
||||
flags = (flags & ~O_ACCMODE) | O_RDWR;
|
||||
break;
|
||||
default:
|
||||
goto error;
|
||||
case ':':
|
||||
return flags;
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
return rb_io_flags_modenum(rb_io_mode_flags(mode));
|
||||
}
|
||||
|
||||
#define MODENUM_MAX 4
|
||||
|
|
Loading…
Add table
Reference in a new issue