Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDJ Delorie <dj@redhat.com>2000-05-19 21:15:02 +0400
committerDJ Delorie <dj@redhat.com>2000-05-19 21:15:02 +0400
commited8387fb4fc5fe02f334d59eda3daa2c6463fb8f (patch)
tree04f643bf65e710f48a55b7d401d7468fde616cb7 /winsup/cygwin
parentf00c1d2ccd499cb0adfede255c9e704e65931623 (diff)
* syscalls.cc (setmode): change mode of any matching FILE* also.
Diffstat (limited to 'winsup/cygwin')
-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 e04338eb8..59e7b905a 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 5eaf301f3..c1ad04b1c 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;
}