]> git.sur5r.net Git - cc65/commitdiff
Fix open flags, minor optimization
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 15 Nov 2002 23:52:39 +0000 (23:52 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Fri, 15 Nov 2002 23:52:39 +0000 (23:52 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1526 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/_fopen.c

index 88d01e7e36fc4a1c4b09fa41ce6c49a8108ca71e..a81c2358ae3a21a4d34ef95ec24ff96aa4094d11 100644 (file)
 static unsigned char amode_to_bmode (const char* mode)
 /* Convert ASCII mode (like for fopen) to binary mode (for open) */
 {
-    char         c;
-    char         flag = 0;
-    unsigned char binmode = 0;
+    unsigned char binmode;
 
-    c = *mode++;
-    switch(c) {
+    switch (*mode++) {
         case 'w':
-            binmode = O_WRONLY;
+            binmode = O_WRONLY | O_CREAT | O_TRUNC;
             break;
         case 'r':
             binmode = O_RDONLY;
@@ -34,19 +31,23 @@ static unsigned char amode_to_bmode (const char* mode)
             return 0;  /* invalid char */
     }
 
-    while (c = *mode++) {
-        switch(c) {
+    while (1) {
+        switch (*mode++) {
             case '+':
-                binmode = (binmode & ~15) | O_RDWR;
+                /* always to r/w in addition to anything already set */
+                binmode |= O_RDWR;
                 break;
             case 'b':
                 /* currently ignored */
                 break;
+            case '\0':
+                /* end of mode string reached */
+                return binmode;
             default:
-                return 0;  /* invalid char */
+                /* invalid char in mode string */
+                return 0;
         }
     }
-    return binmode;
 }