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