aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2000-05-19 17:15:02 +0000
committerDJ Delorie <dj@redhat.com>2000-05-19 17:15:02 +0000
commited8387fb4fc5fe02f334d59eda3daa2c6463fb8f (patch)
tree04f643bf65e710f48a55b7d401d7468fde616cb7
parentf00c1d2ccd499cb0adfede255c9e704e65931623 (diff)
downloadnewlib-ed8387fb4fc5fe02f334d59eda3daa2c6463fb8f.zip
newlib-ed8387fb4fc5fe02f334d59eda3daa2c6463fb8f.tar.gz
newlib-ed8387fb4fc5fe02f334d59eda3daa2c6463fb8f.tar.bz2
* syscalls.cc (setmode): change mode of any matching FILE* also.
-rw-r--r--winsup/cygwin/ChangeLog4
-rw-r--r--winsup/cygwin/syscalls.cc22
2 files changed, 26 insertions, 0 deletions
diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog
index e04338e..59e7b90 100644
--- a/winsup/cygwin/ChangeLog
+++ b/winsup/cygwin/ChangeLog
@@ -1,3 +1,7 @@
+2000-05-19 DJ Delorie <dj@cygnus.com>
+
+ * syscalls.cc (setmode): change mode of any matching FILE* also.
+
Thu May 18 17:28:19 2000 Christopher Faylor <cgf@cygnus.com>
* Makefile.in: Remove external.h dependency.
diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc
index 5eaf301..c1ad04b 100644
--- a/winsup/cygwin/syscalls.cc
+++ b/winsup/cygwin/syscalls.cc
@@ -1430,6 +1430,24 @@ ttyname (int fd)
return (char *)(dtable[fd]->ttyname ());
}
+/* internal newlib function */
+extern "C" int _fwalk (struct _reent *ptr, int (*function)(FILE *));
+
+static int setmode_mode;
+static int setmode_file;
+
+static int
+setmode_helper (FILE *f)
+{
+ if (fileno(f) != setmode_file)
+ return 0;
+ if (setmode_mode & O_TEXT)
+ f->_flags |= __SCLE;
+ else
+ f->_flags &= ~__SCLE;
+ return 0;
+}
+
/* Set a file descriptor into text or binary mode, returning the
previous mode. */
@@ -1472,6 +1490,10 @@ setmode (int fd, int mode)
p->set_r_binary (0);
}
+ setmode_mode = mode;
+ setmode_file = fd;
+ _fwalk(_REENT, setmode_helper);
+
return res;
}