summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2003-02-13 15:09:39 +0000
committerIlia Alshanetsky <iliaa@php.net>2003-02-13 15:09:39 +0000
commitc28753de76606ba6ac9c964704685b765361dff9 (patch)
treec52615a7569955d10894b0f10817196b97d7f598
parentf9457bf84289749248384145931fa8657178ac27 (diff)
downloadphp-git-c28753de76606ba6ac9c964704685b765361dff9.tar.gz
Simplified the mode validation code & added support for read+write mode to
'x' mode.
-rwxr-xr-xmain/streams.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/main/streams.c b/main/streams.c
index 9d63f2aa34..c9017fb684 100755
--- a/main/streams.c
+++ b/main/streams.c
@@ -1853,27 +1853,13 @@ PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags)
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;
@@ -1883,6 +1869,14 @@ PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags)
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;