From fc66711ad5b92067c758c807ac6210f808050767 Mon Sep 17 00:00:00 2001 From: "Evgeny Grin (Karlson2k)" Date: Tue, 25 Jan 2022 19:25:38 +0300 Subject: Moved mhd_panic() and helpers to separate .c/.h files --- src/microhttpd/mhd_panic.c | 101 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 src/microhttpd/mhd_panic.c (limited to 'src/microhttpd/mhd_panic.c') diff --git a/src/microhttpd/mhd_panic.c b/src/microhttpd/mhd_panic.c new file mode 100644 index 00000000..1efba20d --- /dev/null +++ b/src/microhttpd/mhd_panic.c @@ -0,0 +1,101 @@ +/* + This file is part of libmicrohttpd + Copyright (C) 2007-2018 Daniel Pittman and Christian Grothoff + Copyright (C) 2014-2022 Evgeny Grin (Karlson2k) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/** + * @file microhttpd/mhd_panic.h + * @brief MHD_panic() function and helpers + * @author Daniel Pittman + * @author Christian Grothoff + * @author Karlson2k (Evgeny Grin) + */ + +#include "mhd_panic.h" +#include "platform.h" +#include "microhttpd.h" + +/** + * Handler for fatal errors. + */ +MHD_PanicCallback mhd_panic = (MHD_PanicCallback) NULL; + +/** + * Closure argument for #mhd_panic. + */ +void *mhd_panic_cls = NULL; + + +/** + * Default implementation of the panic function, + * prints an error message and aborts. + * + * @param cls unused + * @param file name of the file with the problem + * @param line line number with the problem + * @param reason error message with details + */ +_MHD_NORETURN static void +mhd_panic_std (void *cls, + const char *file, + unsigned int line, + const char *reason) +{ + (void) cls; /* Mute compiler warning. */ +#ifdef HAVE_MESSAGES + fprintf (stderr, + _ ("Fatal error in GNU libmicrohttpd %s:%u: %s\n"), + file, + line, + reason); +#else /* ! HAVE_MESSAGES */ + (void) file; /* Mute compiler warning. */ + (void) line; /* Mute compiler warning. */ + (void) reason; /* Mute compiler warning. */ +#endif + abort (); +} + + +/** + * Sets the global error handler to a different implementation. @a cb + * will only be called in the case of typically fatal, serious + * internal consistency issues. These issues should only arise in the + * case of serious memory corruption or similar problems with the + * architecture. While @a cb is allowed to return and MHD will then + * try to continue, this is never safe. + * + * The default implementation that is used if no panic function is set + * simply prints an error message and calls `abort()`. Alternative + * implementations might call `exit()` or other similar functions. + * + * @param cb new error handler or NULL to use default handler + * @param cls passed to @a cb + * @ingroup logging + */ +void +MHD_set_panic_func (MHD_PanicCallback cb, + void *cls) +{ + if ((MHD_PanicCallback) NULL != cb) + mhd_panic = cb; + else + mhd_panic = &mhd_panic_std; + + mhd_panic_cls = cls; +} -- cgit v1.2.3