switch (mode[0]) {
case 'r':
- if (strchr(mode, '+')) {
- flags = O_RDWR;
- } else {
- flags = O_RDONLY;
- }
+ flags = 0;
break;
case 'w':
- if (strchr(mode, '+')) {
- flags = O_RDWR;
- } else {
- flags = O_WRONLY;
- }
- flags |= O_TRUNC|O_CREAT;
+ flags = O_TRUNC|O_CREAT;
break;
case 'a':
- if (strchr(mode, '+')) {
- flags = O_RDWR;
- } else {
- flags = O_WRONLY;
- }
- flags |= O_CREAT|O_APPEND;
+ flags = O_CREAT|O_APPEND;
break;
case 'x':
flags = O_CREAT|O_EXCL;
return FAILURE;
}
+ if (strchr(mode, '+')) {
+ flags |= O_RDWR;
+ } else if (flags) {
+ flags |= O_WRONLY;
+ } else {
+ flags |= O_RDONLY'
+ }
+
#ifdef O_BINARY
if (strchr(mode, 'b')) {
flags |= O_BINARY;