1/* Set a file descriptor's mode to binary or to text. 2 3 Copyright (C) 2001 Free Software Foundation, Inc. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 2, or (at your option) 8 any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program; see the file COPYING. 17 If not, write to the Free Software Foundation, 18 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 19 20/* Written by Paul Eggert <eggert@twinsun.com> */ 21 22#if HAVE_CONFIG_H 23# include <config.h> 24#endif 25 26#if HAVE_STDBOOL_H 27# include <stdbool.h> 28#else 29typedef enum {false = 0, true = 1} bool; 30#endif 31 32#if HAVE_SETMODE_DOS 33# include <io.h> 34# if HAVE_FCNTL_H 35# include <fcntl.h> 36# endif 37# if HAVE_UNISTD_H 38# include <unistd.h> 39# endif 40#endif 41 42#include "setmode.h" 43#undef set_binary_mode 44 45 46/* Set the binary mode of FD to MODE, returning its previous mode. 47 MODE is 1 for binary and 0 for text. If setting the mode might 48 cause problems, ignore the request and return MODE. Always return 49 1 on POSIX platforms, which do not distinguish between text and 50 binary. */ 51 52bool 53set_binary_mode (int fd, bool mode) 54{ 55#if HAVE_SETMODE_DOS 56 if (isatty (fd)) 57 return mode; 58 return setmode (fd, mode ? O_BINARY : O_TEXT) != O_TEXT; 59#else 60 return 1; 61#endif 62} 63