1/* Prefer faster, non-thread-safe stdio functions if available.
2
3   Copyright (C) 2001, 2002, 2003, 2004 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 along
16   with this program; if not, write to the Free Software Foundation,
17   Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
18
19/* Written by Jim Meyering.  */
20
21#ifndef UNLOCKED_IO_H
22#define UNLOCKED_IO_H 1
23
24/* These are wrappers for functions/macros from the GNU C library, and
25   from other C libraries supporting POSIX's optional thread-safe functions.
26
27   The standard I/O functions are thread-safe.  These *_unlocked ones are
28   more efficient but not thread-safe.  That they're not thread-safe is
29   fine since all of the applications in this package are single threaded.
30
31   Also, some code that is shared with the GNU C library may invoke
32   the *_unlocked functions directly.  On hosts that lack those
33   functions, invoke the non-thread-safe versions instead.  */
34
35#include <stdio.h>
36
37#if HAVE_DECL_CLEARERR_UNLOCKED
38# undef clearerr
39# define clearerr(x) clearerr_unlocked (x)
40#else
41# define clearerr_unlocked(x) clearerr (x)
42#endif
43
44#if HAVE_DECL_FEOF_UNLOCKED
45# undef feof
46# define feof(x) feof_unlocked (x)
47#else
48# define feof_unlocked(x) feof (x)
49#endif
50
51#if HAVE_DECL_FERROR_UNLOCKED
52# undef ferror
53# define ferror(x) ferror_unlocked (x)
54#else
55# define ferror_unlocked(x) ferror (x)
56#endif
57
58#if HAVE_DECL_FFLUSH_UNLOCKED
59# undef fflush
60# define fflush(x) fflush_unlocked (x)
61#else
62# define fflush_unlocked(x) fflush (x)
63#endif
64
65#if HAVE_DECL_FGETS_UNLOCKED
66# undef fgets
67# define fgets(x,y,z) fgets_unlocked (x,y,z)
68#else
69# define fgets_unlocked(x,y,z) fgets (x,y,z)
70#endif
71
72#if HAVE_DECL_FPUTC_UNLOCKED
73# undef fputc
74# define fputc(x,y) fputc_unlocked (x,y)
75#else
76# define fputc_unlocked(x,y) fputc (x,y)
77#endif
78
79#if HAVE_DECL_FPUTS_UNLOCKED
80# undef fputs
81# define fputs(x,y) fputs_unlocked (x,y)
82#else
83# define fputs_unlocked(x,y) fputs (x,y)
84#endif
85
86#if HAVE_DECL_FREAD_UNLOCKED
87# undef fread
88# define fread(w,x,y,z) fread_unlocked (w,x,y,z)
89#else
90# define fread_unlocked(w,x,y,z) fread (w,x,y,z)
91#endif
92
93#if HAVE_DECL_FWRITE_UNLOCKED
94# undef fwrite
95# define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z)
96#else
97# define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z)
98#endif
99
100#if HAVE_DECL_GETC_UNLOCKED
101# undef getc
102# define getc(x) getc_unlocked (x)
103#else
104# define getc_unlocked(x) getc (x)
105#endif
106
107#if HAVE_DECL_GETCHAR_UNLOCKED
108# undef getchar
109# define getchar() getchar_unlocked ()
110#else
111# define getchar_unlocked() getchar ()
112#endif
113
114#if HAVE_DECL_PUTC_UNLOCKED
115# undef putc
116# define putc(x,y) putc_unlocked (x,y)
117#else
118# define putc_unlocked(x,y) putc (x,y)
119#endif
120
121#if HAVE_DECL_PUTCHAR_UNLOCKED
122# undef putchar
123# define putchar(x) putchar_unlocked (x)
124#else
125# define putchar_unlocked(x) putchar (x)
126#endif
127
128#undef flockfile
129#define flockfile(x) ((void) 0)
130
131#undef ftrylockfile
132#define ftrylockfile(x) 0
133
134#undef funlockfile
135#define funlockfile(x) ((void) 0)
136
137#endif /* UNLOCKED_IO_H */
138