/src/mhd2/src/mhd2/mhd_panic.c
Line | Count | Source |
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.c |
41 | | * @brief mhd_panic() and MHD_lib_set_panic_func() implementations |
42 | | * @author Karlson2k (Evgeny Grin) |
43 | | */ |
44 | | |
45 | | #include "mhd_sys_options.h" |
46 | | |
47 | | #include <stdio.h> |
48 | | #ifdef HAVE_STDLIB_H |
49 | | # include <stdlib.h> |
50 | | #elif defined(HAVE_UNISTD_H) |
51 | | # include <unistd.h> |
52 | | #endif |
53 | | #include "sys_null_macro.h" |
54 | | #include "mhd_public_api.h" |
55 | | #include "mhd_panic.h" |
56 | | |
57 | | /** |
58 | | * The user handler for panic |
59 | | */ |
60 | | static MHD_PanicCallback user_panic_handler = (MHD_PanicCallback) NULL; |
61 | | |
62 | | /** |
63 | | * The closure argument for the #user_panic_handler |
64 | | */ |
65 | | static void *user_panic_handler_cls = NULL; |
66 | | |
67 | | MHD_INTERNAL void |
68 | | mhd_panic_init_default (void) |
69 | 2 | { |
70 | 2 | user_panic_handler = (MHD_PanicCallback) NULL; |
71 | 2 | } |
72 | | |
73 | | |
74 | | MHD_EXTERN_ void |
75 | | MHD_lib_set_panic_func (MHD_PanicCallback cb, |
76 | | void *cls) |
77 | 0 | { |
78 | 0 | user_panic_handler = cb; |
79 | 0 | user_panic_handler_cls = cls; |
80 | 0 | } |
81 | | |
82 | | |
83 | | MHD_NORETURN_ MHD_INTERNAL void |
84 | | mhd_panic (const char *file, |
85 | | const char *func, |
86 | | unsigned int line, |
87 | | const char *message) |
88 | 0 | { |
89 | 0 | static const char empty_str[1] = ""; |
90 | 0 | if (NULL == file) |
91 | 0 | file = empty_str; |
92 | 0 | if (NULL == func) |
93 | 0 | func = empty_str; |
94 | 0 | if (NULL == message) |
95 | 0 | message = empty_str; |
96 | 0 | if (NULL != user_panic_handler) |
97 | 0 | user_panic_handler (user_panic_handler_cls, |
98 | 0 | file, func, line, message); |
99 | 0 | #ifdef MHD_SUPPORT_LOG_FUNCTIONALITY |
100 | 0 | if (0 == file[0]) |
101 | 0 | fprintf (stderr, |
102 | 0 | "Unrecoverable error detected in GNU libmicrohttpd%s%s\n", |
103 | 0 | (0 == message[0]) ? "" : ": ", |
104 | 0 | message); |
105 | 0 | else |
106 | 0 | { |
107 | 0 | if (0 != func[0]) |
108 | 0 | { |
109 | 0 | fprintf (stderr, |
110 | 0 | "Unrecoverable error detected in GNU libmicrohttpd, " \ |
111 | 0 | "file '%s' at %s:%u%s%s\n", |
112 | 0 | file, func, line, |
113 | 0 | (0 == message[0]) ? "" : ": ", |
114 | 0 | message); |
115 | 0 | } |
116 | 0 | else |
117 | 0 | { |
118 | 0 | fprintf (stderr, |
119 | 0 | "Unrecoverable error detected in GNU libmicrohttpd, " \ |
120 | 0 | "file '%s' at line %u%s%s\n", |
121 | 0 | file, line, |
122 | 0 | (0 == message[0]) ? "" : ": ", |
123 | 0 | message); |
124 | 0 | } |
125 | 0 | } |
126 | 0 | #endif /* MHD_SUPPORT_LOG_FUNCTIONALITY */ |
127 | 0 | abort (); |
128 | 0 | } |