Rev 4874 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4874 | Rev 4921 | ||
---|---|---|---|
Line 58... | Line 58... | ||
58 | break; |
58 | break; |
59 | default: /* illegal mode */ |
59 | default: /* illegal mode */ |
60 | ptr->_errno = EINVAL; |
60 | ptr->_errno = EINVAL; |
61 | return (0); |
61 | return (0); |
62 | } |
62 | } |
63 | if (mode[1] && (mode[1] == '+' || mode[2] == '+')) |
63 | while (*++mode) |
64 | { |
64 | { |
65 | ret = (ret & ~(__SRD | __SWR)) | __SRW; |
- | |
66 | m = O_RDWR; |
65 | switch (*mode) |
67 | } |
- | |
68 | if (mode[1] && (mode[1] == 'b' || mode[2] == 'b')) |
- | |
69 | { |
66 | { |
- | 67 | case '+': |
|
- | 68 | ret = (ret & ~(__SRD | __SWR)) | __SRW; |
|
- | 69 | m = (m & ~O_ACCMODE) | O_RDWR; |
|
- | 70 | break; |
|
- | 71 | case 'b': |
|
70 | #ifdef O_BINARY |
72 | #ifdef O_BINARY |
71 | m |= O_BINARY; |
73 | m |= O_BINARY; |
72 | #endif |
74 | #endif |
73 | } |
75 | break; |
74 | #ifdef __CYGWIN__ |
76 | #ifdef __CYGWIN__ |
75 | else if (mode[1] && (mode[1] == 't' || mode[2] == 't')) |
- | |
76 | #else |
- | |
77 | else |
- | |
78 | #endif |
- | |
79 | { |
- | |
80 | #ifdef O_TEXT |
77 | case 't': |
81 | m |= O_TEXT; |
78 | m |= O_TEXT; |
- | 79 | break; |
|
- | 80 | #endif |
|
- | 81 | #if defined (O_CLOEXEC) && defined (_GLIBC_EXTENSION) |
|
- | 82 | case 'e': |
|
- | 83 | m |= O_CLOEXEC; |
|
- | 84 | break; |
|
82 | #endif |
85 | #endif |
- | 86 | case 'x': |
|
- | 87 | m |= O_EXCL; |
|
- | 88 | break; |
|
- | 89 | default: |
|
- | 90 | break; |
|
- | 91 | } |
|
83 | } |
92 | } |
- | 93 | #if defined (O_TEXT) && !defined (__CYGWIN__) |
|
- | 94 | if (!(m | O_BINARY)) |
|
- | 95 | m |= O_TEXT; |
|
- | 96 | #endif |
|
84 | *optr = m | o; |
97 | *optr = m | o; |
85 | return ret; |
98 | return ret; |
86 | } |
99 | } |