view libcore/core/panic.h @ 193:78774cc2cc6b

doc: minimal typo
author David Demelier <markand@malikania.fr>
date Sat, 07 Nov 2020 19:26:51 +0100
parents 789b23e01f52
children dd7c8d4321a3
line wrap: on
line source

/*
 * panic.h -- unrecoverable error handling
 *
 * Copyright (c) 2020 David Demelier <markand@malikania.fr>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef MOLKO_PANIC_H
#define MOLKO_PANIC_H

/**
 * \file panic.h
 * \brief Unrecoverable error handling.
 * \ingroup basics
 *
 * This set of functions should be used to detect runtime errors that are
 * unexpected. They should be used only when the game cannot continue because
 * it is in a unrecoverable state.
 *
 * Examples of appropriate use cases:
 *
 * - Game saved data is corrupt,
 * - Assets are missing,
 * - No more memory.
 *
 * In other contexts, use asserts to indicates programming error and
 * appropriate solutions to recover the game otherwise.
 */

#include <stdarg.h>
#include <stdnoreturn.h>

#include "plat.h"

/**
 * \brief Global panic handler.
 *
 * The default implementation shows the last error and exit with code 1. The
 * function must not return so you have to implement a setjmp/longjmp or a
 * exception to be thrown.
 *
 * If the user defined function returns, panic routines will finally exit with
 * code 1.
 */
extern void (*panic_handler)(void);

/**
 * Terminate the program using the \ref panic_handler routine.
 *
 * This function will first set the global error with the provided format
 * string and then call the handler.
 *
 * \pre fmt != NULL
 * \param fmt the printf(3) format string
 */
noreturn void
panicf(const char *fmt, ...) PLAT_PRINTF(1, 2);

/**
 * Similar to \ref panicf but with a arguments pointer.
 *
 * \pre fmt != NULL
 * \param fmt the printf(3) format string
 * \param ap the arguments pointer
 */
noreturn void
vpanicf(const char *fmt, va_list ap) PLAT_PRINTF(1, 0);

/**
 * Similar to \ref panicf but use last error stored using \ref error.h
 * routines.
 */
noreturn void
panic(void);

#endif /* !MOLKO_PANIC_H */