1 /* Declaration for error-reporting function 2 Copyright (C) 1995-1997, 2003, 2006, 2008-2018 Free Software Foundation, 3 Inc. 4 This file is part of the GNU C Library. 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <https://www.gnu.org/licenses/>. */ 18 19 #ifndef _ERROR_H 20 #define _ERROR_H 1 21 22 /* The __attribute__ feature is available in gcc versions 2.5 and later. 23 The __-protected variants of the attributes 'format' and 'printf' are 24 accepted by gcc versions 2.6.4 (effectively 2.7) and later. 25 We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because 26 gnulib and libintl do '#define printf __printf__' when they override 27 the 'printf' function. */ 28 #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) 29 # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) 30 #else 31 # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ 32 #endif 33 34 /* On mingw, the flavor of printf depends on whether the extensions module 35 * is in use; the check for <stdio.h> determines the witness macro. */ 36 #ifndef _GL_ATTRIBUTE_SPEC_PRINTF 37 # if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 38 # define _GL_ATTRIBUTE_SPEC_PRINTF __gnu_printf__ 39 # else 40 # define _GL_ATTRIBUTE_SPEC_PRINTF __printf__ 41 # endif 42 #endif 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 /* Print a message with 'fprintf (stderr, FORMAT, ...)'; 49 if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). 50 If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ 51 52 extern void error (int __status, int __errnum, const char *__format, ...) 53 _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 3, 4)); 54 55 extern void error_at_line (int __status, int __errnum, const char *__fname, 56 unsigned int __lineno, const char *__format, ...) 57 _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF, 5, 6)); 58 59 /* If NULL, error will flush stdout, then print on stderr the program 60 name, a colon and a space. Otherwise, error will call this 61 function without parameters instead. */ 62 extern void (*error_print_progname) (void); 63 64 /* This variable is incremented each time 'error' is called. */ 65 extern unsigned int error_message_count; 66 67 /* Sometimes we want to have at most one error per line. This 68 variable controls whether this mode is selected or not. */ 69 extern int error_one_per_line; 70 71 #ifdef __cplusplus 72 } 73 #endif 74 75 #endif /* error.h */ 76