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