]> granicus.if.org Git - yasm/commitdiff
Make yasm_fatal() and implementations take a list of printf-like parameters.
authorPeter Johnson <peter@tortall.net>
Sun, 8 Jun 2003 21:21:22 +0000 (21:21 -0000)
committerPeter Johnson <peter@tortall.net>
Sun, 8 Jun 2003 21:21:22 +0000 (21:21 -0000)
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
libyasm/errwarn.c
libyasm/errwarn.h

index 63e329a6d293731f1507fe779f511f4bfef8c2c5..a648c50231ae513cf2c430871e825b7ddf79d875 100644 (file)
@@ -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 *
index 7b165021c005f59f3b84d66883e35a2756ecd9d0..700a97e30f2ec0926c945f78676905059d9cbf5d 100644 (file)
@@ -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 <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. */
@@ -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.
index f15700a16175c787fbc3dbf2a5248e8821bb4ee1..fbcca6dbdbad699ddaa25192672c8ca4e061cfea 100644 (file)
@@ -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