mhd_panic.h (3895B)
1 /* SPDX-License-Identifier: LGPL-2.1-or-later OR (GPL-2.0-or-later WITH eCos-exception-2.0) */ 2 /* 3 This file is part of GNU libmicrohttpd. 4 Copyright (C) 2024 Evgeny Grin (Karlson2k) 5 6 GNU libmicrohttpd is free software; you can redistribute it and/or 7 modify it under the terms of the GNU Lesser General Public 8 License as published by the Free Software Foundation; either 9 version 2.1 of the License, or (at your option) any later version. 10 11 GNU libmicrohttpd 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 GNU 14 Lesser General Public License for more details. 15 16 Alternatively, you can redistribute GNU libmicrohttpd and/or 17 modify it under the terms of the GNU General Public License as 18 published by the Free Software Foundation; either version 2 of 19 the License, or (at your option) any later version, together 20 with the eCos exception, as follows: 21 22 As a special exception, if other files instantiate templates or 23 use macros or inline functions from this file, or you compile this 24 file and link it with other works to produce a work based on this 25 file, this file does not by itself cause the resulting work to be 26 covered by the GNU General Public License. However the source code 27 for this file must still be made available in accordance with 28 section (3) of the GNU General Public License v2. 29 30 This exception does not invalidate any other reasons why a work 31 based on this file might be covered by the GNU General Public 32 License. 33 34 You should have received copies of the GNU Lesser General Public 35 License and the GNU General Public License along with this library; 36 if not, see <https://www.gnu.org/licenses/>. 37 */ 38 39 /** 40 * @file src/mhd2/mhd_panic.h 41 * @brief MHD_PANIC() macro and declarations of the related functions 42 * @author Karlson2k (Evgeny Grin) 43 */ 44 45 #ifndef MHD_PANIC_H 46 #define MHD_PANIC_H 1 47 48 #include "mhd_sys_options.h" 49 50 #ifndef BUILDING_MHD_LIB 51 /* Simplified implementation, utilised by unit tests that use some parts of 52 the library code directly. */ 53 #include <stdio.h> 54 #ifdef HAVE_STDLIB_H 55 # include <stdlib.h> 56 #elif defined(HAVE_UNISTD_H) 57 # include <unistd.h> 58 #endif 59 60 #define MHD_PANIC(msg) \ 61 do { fprintf (stderr,"Unrecoverable error: %s\n", msg); abort (); } \ 62 while (0) 63 64 #else /* BUILDING_MHD_LIB */ 65 /* Fully functional implementation for the library */ 66 67 /** 68 * Internal panic handler 69 * @param file the name of the file where the panic was triggered 70 * @param func the name of the function where the panic was triggered 71 * @param line the number of the line where the panic was triggered 72 * @param message the message with the description of the panic 73 */ 74 MHD_NORETURN_ MHD_INTERNAL void 75 mhd_panic (const char *file, 76 const char *func, 77 unsigned int line, 78 const char *message); 79 80 81 #ifdef MHD_PANIC 82 #error MHD_PANIC macro is already defined. Check other headers. 83 #endif /* MHD_PANIC */ 84 85 #ifdef MHD_SUPPORT_LOG_FUNCTIONALITY 86 # ifdef MHD_HAVE_MHD_FUNC_ 87 /** 88 * Panic processing for unrecoverable errors. 89 * 90 * @param msg the error message string 91 */ 92 # define MHD_PANIC(msg) \ 93 mhd_panic (__FILE__, MHD_FUNC_, __LINE__, msg) 94 # else 95 # include "sys_null_macro.h" 96 /** 97 * Panic processing for unrecoverable errors. 98 * 99 * @param msg the error message string 100 */ 101 # define MHD_PANIC(msg) \ 102 mhd_panic (__FILE__, NULL, __LINE__, msg) 103 # endif 104 #else 105 # include "sys_null_macro.h" 106 /** 107 * Panic processing for unrecoverable errors. 108 * 109 * @param msg the error message string 110 */ 111 # define MHD_PANIC(msg) \ 112 mhd_panic (NULL, NULL, __LINE__, NULL) 113 #endif 114 115 /** 116 * Initialise panic handler to default value 117 */ 118 MHD_INTERNAL void 119 mhd_panic_init_default (void); 120 121 #endif /* BUILDING_MHD_LIB */ 122 123 #endif /* ! MHD_PANIC_H */