static /*@exits@*/ void handle_yasm_int_error(const char *file,
unsigned int line,
const char *message);
-static /*@exits@*/ void handle_yasm_fatal(const char *message);
+static /*@exits@*/ void handle_yasm_fatal(const char *message, ...);
static const char *handle_yasm_gettext(const char *msgid);
static void print_yasm_error(const char *filename, unsigned long line,
const char *msg);
}
static /*@exits@*/ void
-handle_yasm_fatal(const char *message)
+handle_yasm_fatal(const char *fmt, ...)
{
- fprintf(stderr, _("FATAL: %s\n"), gettext(message));
-#ifdef HAVE_ABORT
- abort();
-#else
+ va_list va;
+ fprintf(stderr, "yasm: %s: ", _("FATAL"));
+ va_start(va, fmt);
+ vfprintf(stderr, gettext(fmt), va);
+ va_end(va);
+ fputc('\n', stderr);
exit(EXIT_FAILURE);
-#endif
}
static const char *
*/
#define YASM_LIB_INTERNAL
#include "util.h"
-/*@unused@*/ RCSID("$IdPath: yasm/libyasm/errwarn.c,v 1.56 2003/05/04 01:39:10 peter Exp $");
+/*@unused@*/ RCSID("$IdPath$");
#include <ctype.h>
/* Default handlers for replacable functions */
static /*@exits@*/ void def_internal_error_
(const char *file, unsigned int line, const char *message);
-static /*@exits@*/ void def_fatal(const char *message);
+static /*@exits@*/ void def_fatal(const char *message, ...);
static const char *def_gettext_hook(const char *msgid);
/* Storage for errwarn's "extern" functions */
/*@exits@*/ void (*yasm_internal_error_)
(const char *file, unsigned int line, const char *message)
= def_internal_error_;
-/*@exits@*/ void (*yasm_fatal) (const char *message) = def_fatal;
+/*@exits@*/ void (*yasm_fatal) (const char *message, ...) = def_fatal;
const char * (*yasm_gettext_hook) (const char *msgid) = def_gettext_hook;
/* Enabled warnings. See errwarn.h for a list. */
* memory), so just exit immediately.
*/
static void
-def_fatal(const char *message)
+def_fatal(const char *fmt, ...)
{
- fprintf(stderr, yasm_gettext_hook(N_("FATAL: %s\n")),
- yasm_gettext_hook(message));
-#ifdef HAVE_ABORT
- abort();
-#else
+ va_list va;
+ fprintf(stderr, "%s: ", yasm_gettext_hook(N_("FATAL")));
+ va_start(va, fmt);
+ vfprintf(stderr, yasm_gettext_hook(fmt), va);
+ va_end(va);
+ fputc('\n', stderr);
exit(EXIT_FAILURE);
-#endif
}
/* Create an errwarn structure in the correct linked list location.
* \file errwarn.h
* \brief YASM error and warning reporting interface.
*
- * $IdPath: yasm/libyasm/errwarn.h,v 1.37 2003/05/04 08:40:35 peter Exp $
+ * $IdPath$
*
* Copyright (C) 2001 Peter Johnson
*
* \warning This function must NOT return to calling code; exit or longjmp
* instead.
* \param message fatal error message
+ * \param ... argument list for message
*/
-extern /*@exits@*/ void (*yasm_fatal) (const char *message);
+extern /*@exits@*/ void (*yasm_fatal) (const char *message, ...);
/** Log an error. va_list version of yasm__error().
* \internal