summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/syscalls.cc
diff options
context:
space:
mode:
Diffstat (limited to 'winsup/cygwin/syscalls.cc')
-rw-r--r--winsup/cygwin/syscalls.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 4e862a21f..3211ab934 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -1646,19 +1646,26 @@ setmode (int fd, int mode)
int res;
if (p->get_w_binary () && p->get_r_binary ())
res = O_BINARY;
+ else if (p->get_w_binset () && p->get_r_binset ())
+ res = O_TEXT; /* Specifically set O_TEXT */
else
- res = O_TEXT;
+ res = 0;
if (mode & O_BINARY)
{
p->set_w_binary (1);
p->set_r_binary (1);
}
- else
+ else if (mode & O_TEXT)
{
p->set_w_binary (0);
p->set_r_binary (0);
}
+ else
+ {
+ p->clear_w_binary ();
+ p->clear_r_binary ();
+ }
if (_cygwin_istext_for_stdio (fd))
setmode_mode = O_TEXT;