[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]