ruby-changes:7194
From: akr <ko1@a...>
Date: Wed, 20 Aug 2008 03:38:47 +0900 (JST)
Subject: [ruby-changes:7194] Ruby:r18713 (trunk): * include/ruby/io.h (FMODE_TRUNC): new constant.
akr 2008-08-20 03:38:32 +0900 (Wed, 20 Aug 2008) New Revision: 18713 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=18713 Log: * 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. Modified files: trunk/ChangeLog trunk/include/ruby/io.h trunk/io.c Index: include/ruby/io.h =================================================================== --- include/ruby/io.h (revision 18712) +++ include/ruby/io.h (revision 18713) @@ -81,6 +81,7 @@ #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 Index: ChangeLog =================================================================== --- ChangeLog (revision 18712) +++ ChangeLog (revision 18713) @@ -1,3 +1,13 @@ +Wed Aug 20 03:36:45 2008 Tanaka Akira <akr@f...> + + * 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@f...> * io.c (fopen): macro for vms removed. fopen is not used now. Index: io.c =================================================================== --- io.c (revision 18712) +++ io.c (revision 18713) @@ -3553,7 +3553,7 @@ 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 @@ if (mode & O_APPEND) { flags |= FMODE_APPEND; } + if (mode & O_TRUNC) { + flags |= FMODE_TRUNC; + } if (mode & O_CREAT) { flags |= FMODE_CREATE; } @@ -3614,46 +3617,46 @@ } int -rb_io_mode_modenum(const char *mode) +rb_io_flags_modenum(int flags) { - int flags = 0; - const char *m = mode; + int mode = 0; - 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); + 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; } - while (*m) { - switch (*m++) { - case 'b': + if (flags & FMODE_APPEND) { + mode |= O_APPEND; + } + if (flags & FMODE_TRUNC) { + mode |= O_TRUNC; + } + if (flags & FMODE_CREATE) { + mode |= O_CREAT; + } #ifdef O_BINARY - flags |= O_BINARY; + if (flags & FMODE_BINMODE) { + mode |= O_BINARY; + } #endif - break; - case '+': - flags = (flags & ~O_ACCMODE) | O_RDWR; - break; - default: - goto error; - case ':': - return flags; - } - } - return flags; + return mode; } +int +rb_io_mode_modenum(const char *mode) +{ + return rb_io_flags_modenum(rb_io_mode_flags(mode)); +} + #define MODENUM_MAX 4 static const char* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/