Branch data Line data Source code
1 : : /* Binary mode I/O.
2 : : Copyright (C) 2001, 2003, 2005, 2008-2012 Free Software Foundation, Inc.
3 : :
4 : : This program is free software: you can redistribute it and/or modify
5 : : it under the terms of the GNU General Public License as published by
6 : : the Free Software Foundation; either version 3 of the License, or
7 : : (at your option) any later version.
8 : :
9 : : This program is distributed in the hope that it will be useful,
10 : : but WITHOUT ANY WARRANTY; without even the implied warranty of
11 : : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 : : GNU General Public License for more details.
13 : :
14 : : You should have received a copy of the GNU General Public License
15 : : along with this program. If not, see <http://www.gnu.org/licenses/>. */
16 : :
17 : : #ifndef _BINARY_H
18 : : #define _BINARY_H
19 : :
20 : : /* For systems that distinguish between text and binary I/O.
21 : : O_BINARY is guaranteed by the gnulib <fcntl.h>. */
22 : : #include <fcntl.h>
23 : :
24 : : /* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...',
25 : : so we include it here first. */
26 : : #include <stdio.h>
27 : :
28 : : /* set_binary_mode (fd, mode)
29 : : sets the binary/text I/O mode of file descriptor fd to the given mode
30 : : (must be O_BINARY or O_TEXT) and returns the previous mode. */
31 : : #if O_BINARY
32 : : # if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__
33 : : # include <io.h> /* declares setmode() */
34 : : # define set_binary_mode setmode
35 : : # else
36 : : # define set_binary_mode _setmode
37 : : # undef fileno
38 : : # define fileno _fileno
39 : : # endif
40 : : #else
41 : : /* On reasonable systems, binary I/O is the only choice. */
42 : : /* Use an inline function rather than a macro, to avoid gcc warnings
43 : : "warning: statement with no effect". */
44 : : static inline int
45 : 2 : set_binary_mode (int fd, int mode)
46 : : {
47 : : (void) fd;
48 : : (void) mode;
49 : 2 : return O_BINARY;
50 : : }
51 : : #endif
52 : :
53 : : /* SET_BINARY (fd);
54 : : changes the file descriptor fd to perform binary I/O. */
55 : : #ifdef __DJGPP__
56 : : # include <unistd.h> /* declares isatty() */
57 : : /* Avoid putting stdin/stdout in binary mode if it is connected to
58 : : the console, because that would make it impossible for the user
59 : : to interrupt the program through Ctrl-C or Ctrl-Break. */
60 : : # define SET_BINARY(fd) ((void) (!isatty (fd) ? (set_binary_mode (fd, O_BINARY), 0) : 0))
61 : : #else
62 : : # define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY))
63 : : #endif
64 : :
65 : : #endif /* _BINARY_H */
|