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