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