1
0
mirror of https://github.com/cc65/cc65.git synced 2025-08-09 13:25:06 +00:00

Fix open flags, minor optimization

git-svn-id: svn://svn.cc65.org/cc65/trunk@1526 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cuz
2002-11-15 23:52:39 +00:00
parent fc81b379d8
commit a3c8336725

View File

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