summaryrefslogtreecommitdiff
path: root/lib/setmode.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2001-12-11 08:11:35 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2001-12-11 08:11:35 +0000
commitd104e14d8e39ca9fc7381c448da64de088b45dc2 (patch)
tree319b3d104b3051ad15b06b69f86c4ef695b27f8b /lib/setmode.c
parent412c4f34362c26ceb5305d8504b1e5766e4c9220 (diff)
downloaddiffutils-d104e14d8e39ca9fc7381c448da64de088b45dc2.tar.gz
Initial revision
Diffstat (limited to 'lib/setmode.c')
-rw-r--r--lib/setmode.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/lib/setmode.c b/lib/setmode.c
new file mode 100644
index 0000000..4a09d24
--- /dev/null
+++ b/lib/setmode.c
@@ -0,0 +1,58 @@
+/* Set a file descriptor's mode to binary or to text.
+
+ Copyright (C) 2001 Free Software Foundation, Inc.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; see the file COPYING.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
+
+/* Written by Paul Eggert <eggert@twinsun.com> */
+
+#if HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_STDBOOL_H
+# include <stdbool.h>
+#else
+typedef enum {false = 0, true = 1} bool;
+#endif
+
+#if HAVE_SETMODE_DOS
+# include <io.h>
+#endif
+
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif
+
+#include "setmode.h"
+#undef set_binary_mode
+
+
+/* Set the binary mode of FD to MODE, returning its previous mode.
+ MODE is 1 for binary and 0 for text. If setting the mode might
+ cause problems, ignore the request and return the current mode.
+ Always return 1 on POSIX platforms, which do not distinguish
+ between text and binary. */
+
+bool
+set_binary_mode (int fd, bool binary)
+{
+#if HAVE_SETMODE_DOS
+ return ! isatty (fd) && setmode (fd, binary ? O_BINARY : 0);
+#else
+ return 1;
+#endif
+}