aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog8
-rw-r--r--awk.h2
-rw-r--r--awkgram.c10
-rw-r--r--awkgram.y10
-rw-r--r--gawkapi.c17
-rw-r--r--msg.c21
6 files changed, 35 insertions, 33 deletions
diff --git a/ChangeLog b/ChangeLog
index 2e4c8cbc..820e1cbb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2012-06-19 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (err): Add `isfatal' first parameter.
+ * awkgram.y (err): Adjust all calls.
+ * msg.c (err): Adjust all calls. Move fatal code to here ...
+ (r_fatal): From here.
+ * gawkapi.c: Remove code duplication and adjust calls to `err'.
+
2012-06-18 Arnold D. Robbins <arnold@skeeve.com>
* gawkapi.h (get_array_element): Restore `wanted' paramater.
diff --git a/awk.h b/awk.h
index 6c1e706a..4f120d37 100644
--- a/awk.h
+++ b/awk.h
@@ -1605,7 +1605,7 @@ extern int mpg_strtoui(mpz_ptr, char *, size_t, char **, int);
/* msg.c */
extern void gawk_exit(int status);
extern void final_exit(int status) ATTRIBUTE_NORETURN;
-extern void err(const char *s, const char *emsg, va_list argp) ATTRIBUTE_PRINTF(2, 0);
+extern void err(bool isfatal, const char *s, const char *emsg, va_list argp) ATTRIBUTE_PRINTF(2, 0);
extern void msg (const char *mesg, ...) ATTRIBUTE_PRINTF_1;
extern void error (const char *mesg, ...) ATTRIBUTE_PRINTF_1;
extern void warning (const char *mesg, ...) ATTRIBUTE_PRINTF_1;
diff --git a/awkgram.c b/awkgram.c
index 7836dbee..bef9a300 100644
--- a/awkgram.c
+++ b/awkgram.c
@@ -4704,7 +4704,7 @@ warning_ln(int line, const char *mesg, ...)
sourceline = line;
print_included_from();
va_start(args, mesg);
- err(_("warning: "), mesg, args);
+ err(false, _("warning: "), mesg, args);
va_end(args);
sourceline = saveline;
}
@@ -4722,9 +4722,9 @@ lintwarn_ln(int line, const char *mesg, ...)
print_included_from();
va_start(args, mesg);
if (lintfunc == r_fatal)
- err(_("fatal: "), mesg, args);
+ err(true, _("fatal: "), mesg, args);
else
- err(_("warning: "), mesg, args);
+ err(false, _("warning: "), mesg, args);
va_end(args);
sourceline = saveline;
if (lintfunc == r_fatal)
@@ -4744,7 +4744,7 @@ error_ln(int line, const char *m, ...)
print_included_from();
errcount++;
va_start(args, m);
- err("error: ", m, args);
+ err(false, "error: ", m, args);
va_end(args);
sourceline = saveline;
}
@@ -4822,7 +4822,7 @@ yyerror(const char *m, ...)
*bp++ = ' ';
}
strcpy(bp, mesg);
- err("", buf, args);
+ err(false, "", buf, args);
va_end(args);
efree(buf);
}
diff --git a/awkgram.y b/awkgram.y
index f7ea5d48..dceca6d2 100644
--- a/awkgram.y
+++ b/awkgram.y
@@ -1984,7 +1984,7 @@ warning_ln(int line, const char *mesg, ...)
sourceline = line;
print_included_from();
va_start(args, mesg);
- err(_("warning: "), mesg, args);
+ err(false, _("warning: "), mesg, args);
va_end(args);
sourceline = saveline;
}
@@ -2002,9 +2002,9 @@ lintwarn_ln(int line, const char *mesg, ...)
print_included_from();
va_start(args, mesg);
if (lintfunc == r_fatal)
- err(_("fatal: "), mesg, args);
+ err(true, _("fatal: "), mesg, args);
else
- err(_("warning: "), mesg, args);
+ err(false, _("warning: "), mesg, args);
va_end(args);
sourceline = saveline;
if (lintfunc == r_fatal)
@@ -2024,7 +2024,7 @@ error_ln(int line, const char *m, ...)
print_included_from();
errcount++;
va_start(args, m);
- err("error: ", m, args);
+ err(false, "error: ", m, args);
va_end(args);
sourceline = saveline;
}
@@ -2102,7 +2102,7 @@ yyerror(const char *m, ...)
*bp++ = ' ';
}
strcpy(bp, mesg);
- err("", buf, args);
+ err(false, "", buf, args);
va_end(args);
efree(buf);
}
diff --git a/gawkapi.c b/gawkapi.c
index b1fba48a..92403dce 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -83,7 +83,6 @@ awk_value_to_node(const awk_value_t *retval)
}
/* Functions to print messages */
-/* FIXME: Code duplicate from msg.c. Fix this. */
/* api_fatal --- print a fatal message and exit */
@@ -95,12 +94,8 @@ api_fatal(awk_ext_id_t id, const char *format, ...)
(void) id;
va_start(args, format);
- err(_("fatal: "), format, args);
+ err(true, _("fatal: "), format, args);
va_end(args);
-#ifdef GAWKDEBUG
- abort();
-#endif
- gawk_exit(EXIT_FATAL);
}
/* api_warning --- print a warning message and exit */
@@ -113,7 +108,7 @@ api_warning(awk_ext_id_t id, const char *format, ...)
(void) id;
va_start(args, format);
- err(_("warning: "), format, args);
+ err(false, _("warning: "), format, args);
va_end(args);
}
@@ -128,14 +123,10 @@ api_lintwarn(awk_ext_id_t id, const char *format, ...)
va_start(args, format);
if (lintwarn == r_fatal) {
- err(_("fatal: "), format, args);
+ err(true, _("fatal: "), format, args);
va_end(args);
-#ifdef GAWKDEBUG
- abort();
-#endif
- gawk_exit(EXIT_FATAL);
} else {
- err(_("warning: "), format, args);
+ err(false, _("warning: "), format, args);
va_end(args);
}
}
diff --git a/msg.c b/msg.c
index b94e840b..bc446a14 100644
--- a/msg.c
+++ b/msg.c
@@ -39,7 +39,7 @@ bool fatal_tag_valid = false;
/* VARARGS2 */
void
-err(const char *s, const char *emsg, va_list argp)
+err(bool isfatal, const char *s, const char *emsg, va_list argp)
{
char *file;
const char *me;
@@ -89,6 +89,13 @@ err(const char *s, const char *emsg, va_list argp)
vfprintf(stderr, emsg, argp);
(void) fprintf(stderr, "\n");
(void) fflush(stderr);
+
+ if (isfatal) {
+#ifdef GAWKDEBUG
+ abort();
+#endif
+ gawk_exit(EXIT_FATAL);
+ }
}
/* msg --- take a varargs error message and print it */
@@ -98,7 +105,7 @@ msg(const char *mesg, ...)
{
va_list args;
va_start(args, mesg);
- err("", mesg, args);
+ err(false, "", mesg, args);
va_end(args);
}
@@ -109,7 +116,7 @@ warning(const char *mesg, ...)
{
va_list args;
va_start(args, mesg);
- err(_("warning: "), mesg, args);
+ err(false, _("warning: "), mesg, args);
va_end(args);
}
@@ -118,7 +125,7 @@ error(const char *mesg, ...)
{
va_list args;
va_start(args, mesg);
- err(_("error: "), mesg, args);
+ err(false, _("error: "), mesg, args);
va_end(args);
}
@@ -141,12 +148,8 @@ r_fatal(const char *mesg, ...)
{
va_list args;
va_start(args, mesg);
- err(_("fatal: "), mesg, args);
+ err(true, _("fatal: "), mesg, args);
va_end(args);
-#ifdef GAWKDEBUG
- abort();
-#endif
- gawk_exit(EXIT_FATAL);
}
/* gawk_exit --- longjmp out if necessary */