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