/** * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * * Copyright (C) 2012-2018 Hercules Dev Team * Copyright (C) Athena Dev Teams * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #define HERCULES_CORE #include "nullpo.h" #include "common/showmsg.h" #include #include #include #include #ifdef HAVE_EXECINFO #include #endif // HAVE_EXECINFO static struct nullpo_interface nullpo_s; struct nullpo_interface *nullpo; /** * Reports failed assertions or NULL pointers * * @param file Source file where the error was detected * @param line Line * @param func Function * @param targetname Name of the checked symbol * @param title Message title to display (i.e. failed assertion or nullpo info) */ static void assert_report(const char *file, int line, const char *func, const char *targetname, const char *title) { #ifdef HAVE_EXECINFO void *array[10]; int size; char **strings; int i; #endif // HAVE_EXECINFO if (file == NULL) file = "??"; if (func == NULL || *func == '\0') func = "unknown"; ShowError("--- %s --------------------------------------------\n", title); ShowError("%s:%d: '%s' in function `%s'\n", file, line, targetname, func); #ifdef HAVE_EXECINFO size = (int)backtrace(array, 10); strings = backtrace_symbols(array, size); for (i = 0; i < size; i++) ShowError("%s\n", strings[i]); free(strings); #endif // HAVE_EXECINFO ShowError("--- end %s ----------------------------------------\n", title); } /** * **/ void nullpo_defaults(void) { nullpo = &nullpo_s; nullpo->assert_report = assert_report; }