Home | History | Annotate | Download | only in lib
      1 /* Prefer faster, non-thread-safe stdio functions if available.
      2 
      3    Copyright (C) 2001-2004, 2009-2012 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