1 /* Get common system includes and various definitions and declarations based 2 on autoconf macros. 3 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 4 Free Software Foundation, Inc. 5 6 This file is part of libcpp (aka cpplib). 7 8 GCC is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 2, or (at your option) any later 11 version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with GCC; see the file COPYING. If not, write to the Free 20 Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 21 02110-1301, USA. */ 22 23 24 #ifndef FIXINC_SYSTEM_H 25 #define FIXINC_SYSTEM_H 26 27 /* We must include stdarg.h before stdio.h. */ 28 #include <stdarg.h> 29 30 #ifdef HAVE_STDDEF_H 31 # include <stddef.h> 32 #endif 33 34 #include <stdio.h> 35 36 /* Define a generic NULL if one hasn't already been defined. */ 37 #ifndef NULL 38 #define NULL 0 39 #endif 40 41 /* Use the unlocked open routines from libiberty. */ 42 #define fopen(PATH,MODE) fopen_unlocked(PATH,MODE) 43 #define fdopen(FILDES,MODE) fdopen_unlocked(FILDES,MODE) 44 #define freopen(PATH,MODE,STREAM) freopen_unlocked(PATH,MODE,STREAM) 45 46 /* fixincludes is not a multi-threaded application and therefore we 47 do not have to use the locking functions. In fact, using the locking 48 functions can cause the compiler to be significantly slower under 49 I/O bound conditions (such as -g -O0 on very large source files). 50 51 HAVE_DECL_PUTC_UNLOCKED actually indicates whether or not the stdio 52 code is multi-thread safe by default. If it is set to 0, then do 53 not worry about using the _unlocked functions. 54 55 fputs_unlocked, fwrite_unlocked, and fprintf_unlocked are 56 extensions and need to be prototyped by hand (since we do not 57 define _GNU_SOURCE). */ 58 59 #if defined HAVE_DECL_PUTC_UNLOCKED && HAVE_DECL_PUTC_UNLOCKED 60 61 # ifdef HAVE_PUTC_UNLOCKED 62 # undef putc 63 # define putc(C, Stream) putc_unlocked (C, Stream) 64 # endif 65 # ifdef HAVE_PUTCHAR_UNLOCKED 66 # undef putchar 67 # define putchar(C) putchar_unlocked (C) 68 # endif 69 # ifdef HAVE_GETC_UNLOCKED 70 # undef getc 71 # define getc(Stream) getc_unlocked (Stream) 72 # endif 73 # ifdef HAVE_GETCHAR_UNLOCKED 74 # undef getchar 75 # define getchar() getchar_unlocked () 76 # endif 77 # ifdef HAVE_FPUTC_UNLOCKED 78 # undef fputc 79 # define fputc(C, Stream) fputc_unlocked (C, Stream) 80 # endif 81 82 # ifdef HAVE_CLEARERR_UNLOCKED 83 # undef clearerr 84 # define clearerr(Stream) clearerr_unlocked (Stream) 85 # if defined (HAVE_DECL_CLEARERR_UNLOCKED) && !HAVE_DECL_CLEARERR_UNLOCKED 86 extern void clearerr_unlocked (FILE *); 87 # endif 88 # endif 89 # ifdef HAVE_FEOF_UNLOCKED 90 # undef feof 91 # define feof(Stream) feof_unlocked (Stream) 92 # if defined (HAVE_DECL_FEOF_UNLOCKED) && !HAVE_DECL_FEOF_UNLOCKED 93 extern int feof_unlocked (FILE *); 94 # endif 95 # endif 96 # ifdef HAVE_FILENO_UNLOCKED 97 # undef fileno 98 # define fileno(Stream) fileno_unlocked (Stream) 99 # if defined (HAVE_DECL_FILENO_UNLOCKED) && !HAVE_DECL_FILENO_UNLOCKED 100 extern int fileno_unlocked (FILE *); 101 # endif 102 # endif 103 # ifdef HAVE_FFLUSH_UNLOCKED 104 # undef fflush 105 # define fflush(Stream) fflush_unlocked (Stream) 106 # if defined (HAVE_DECL_FFLUSH_UNLOCKED) && !HAVE_DECL_FFLUSH_UNLOCKED 107 extern int fflush_unlocked (FILE *); 108 # endif 109 # endif 110 # ifdef HAVE_FGETC_UNLOCKED 111 # undef fgetc 112 # define fgetc(Stream) fgetc_unlocked (Stream) 113 # if defined (HAVE_DECL_FGETC_UNLOCKED) && !HAVE_DECL_FGETC_UNLOCKED 114 extern int fgetc_unlocked (FILE *); 115 # endif 116 # endif 117 # ifdef HAVE_FGETS_UNLOCKED 118 # undef fgets 119 # define fgets(S, n, Stream) fgets_unlocked (S, n, Stream) 120 # if defined (HAVE_DECL_FGETS_UNLOCKED) && !HAVE_DECL_FGETS_UNLOCKED 121 extern char *fgets_unlocked (char *, int, FILE *); 122 # endif 123 # endif 124 # ifdef HAVE_FPUTS_UNLOCKED 125 # undef fputs 126 # define fputs(String, Stream) fputs_unlocked (String, Stream) 127 # if defined (HAVE_DECL_FPUTS_UNLOCKED) && !HAVE_DECL_FPUTS_UNLOCKED 128 extern int fputs_unlocked (const char *, FILE *); 129 # endif 130 # endif 131 # ifdef HAVE_FERROR_UNLOCKED 132 # undef ferror 133 # define ferror(Stream) ferror_unlocked (Stream) 134 # if defined (HAVE_DECL_FERROR_UNLOCKED) && !HAVE_DECL_FERROR_UNLOCKED 135 extern int ferror_unlocked (FILE *); 136 # endif 137 # endif 138 # ifdef HAVE_FREAD_UNLOCKED 139 # undef fread 140 # define fread(Ptr, Size, N, Stream) fread_unlocked (Ptr, Size, N, Stream) 141 # if defined (HAVE_DECL_FREAD_UNLOCKED) && !HAVE_DECL_FREAD_UNLOCKED 142 extern size_t fread_unlocked (void *, size_t, size_t, FILE *); 143 # endif 144 # endif 145 # ifdef HAVE_FWRITE_UNLOCKED 146 # undef fwrite 147 # define fwrite(Ptr, Size, N, Stream) fwrite_unlocked (Ptr, Size, N, Stream) 148 # if defined (HAVE_DECL_FWRITE_UNLOCKED) && !HAVE_DECL_FWRITE_UNLOCKED 149 extern size_t fwrite_unlocked (const void *, size_t, size_t, FILE *); 150 # endif 151 # endif 152 # ifdef HAVE_FPRINTF_UNLOCKED 153 # undef fprintf 154 /* We can't use a function-like macro here because we don't know if 155 we have varargs macros. */ 156 # define fprintf fprintf_unlocked 157 # if defined (HAVE_DECL_FPRINTF_UNLOCKED) && !HAVE_DECL_FPRINTF_UNLOCKED 158 extern int fprintf_unlocked (FILE *, const char *, ...); 159 # endif 160 # endif 161 162 #endif 163 164 /* ??? Glibc's fwrite/fread_unlocked macros cause 165 "warning: signed and unsigned type in conditional expression". */ 166 #undef fread_unlocked 167 #undef fwrite_unlocked 168 169 #include <sys/types.h> 170 #include <errno.h> 171 172 #if !defined (errno) && defined (HAVE_DECL_ERRNO) && !HAVE_DECL_ERRNO 173 extern int errno; 174 #endif 175 176 /* Some of glibc's string inlines cause warnings. Plus we'd rather 177 rely on (and therefore test) GCC's string builtins. */ 178 #define __NO_STRING_INLINES 179 180 #ifdef HAVE_STRING_H 181 # include <string.h> 182 #else 183 # ifdef HAVE_STRINGS_H 184 # include <strings.h> 185 # endif 186 #endif 187 188 #ifdef HAVE_STDLIB_H 189 # include <stdlib.h> 190 #endif 191 192 #ifdef HAVE_UNISTD_H 193 # include <unistd.h> 194 #endif 195 196 #ifdef HAVE_FCNTL_H 197 # include <fcntl.h> 198 #else 199 # ifdef HAVE_SYS_FILE_H 200 # include <sys/file.h> 201 # endif 202 #endif 203 204 /* The HAVE_DECL_* macros are three-state, undefined, 0 or 1. If they 205 are defined to 0 then we must provide the relevant declaration 206 here. These checks will be in the undefined state while configure 207 is running so be careful to test "defined (HAVE_DECL_*)". */ 208 209 #if defined (HAVE_DECL_ABORT) && !HAVE_DECL_ABORT 210 extern void abort (void); 211 #endif 212 213 #if HAVE_SYS_STAT_H 214 # include <sys/stat.h> 215 #endif 216 217 /* Test if something is a normal file. */ 218 #ifndef S_ISREG 219 #define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) 220 #endif 221 222 /* Filename handling macros. */ 223 #include "filenames.h" 224 225 /* Get libiberty declarations. */ 226 #include "libiberty.h" 227 #include "safe-ctype.h" 228 229 #endif /* ! FIXINC_SYSTEM_H */ 230