From b6f7d0316f7e512316a6cd8fa76e0a6dd7f435e4 Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sun, 8 Jun 2003 21:21:22 +0000 Subject: [PATCH] Make yasm_fatal() and implementations take a list of printf-like parameters. Also, don't abort(), just exit()... unlike internal errors, which we want a backtrace for, fatal errors may happen during normal operation. svn path=/trunk/yasm/; revision=975 --- frontends/yasm/yasm.c | 15 ++++++++------- libyasm/errwarn.c | 20 ++++++++++---------- libyasm/errwarn.h | 5 +++-- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/frontends/yasm/yasm.c b/frontends/yasm/yasm.c index 63e329a6..a648c502 100644 --- a/frontends/yasm/yasm.c +++ b/frontends/yasm/yasm.c @@ -86,7 +86,7 @@ static void print_error(const char *fmt, ...); 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); @@ -902,14 +902,15 @@ handle_yasm_int_error(const char *file, unsigned int line, const char *message) } 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 * diff --git a/libyasm/errwarn.c b/libyasm/errwarn.c index 7b165021..700a97e3 100644 --- a/libyasm/errwarn.c +++ b/libyasm/errwarn.c @@ -26,7 +26,7 @@ */ #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 @@ -45,14 +45,14 @@ /* 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. */ @@ -163,15 +163,15 @@ def_internal_error_(const char *file, unsigned int line, const char *message) * 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. diff --git a/libyasm/errwarn.h b/libyasm/errwarn.h index f15700a1..fbcca6db 100644 --- a/libyasm/errwarn.h +++ b/libyasm/errwarn.h @@ -2,7 +2,7 @@ * \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 * @@ -67,8 +67,9 @@ extern /*@exits@*/ void (*yasm_internal_error_) * \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 -- 2.40.0