X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Ferror.c;h=3a77c8722217868ac07e212df8c5aaaa83efd69e;hb=92fb12eb06716d14c05b781f5d9dcde956d77c30;hp=142b2c9f6590fc3dc0b71a0c583b2e517931485e;hpb=4fdeb2145d081ff1b84e3f6c99f9d1c048c0d64a;p=pspp diff --git a/src/error.c b/src/error.c index 142b2c9f65..3a77c87222 100644 --- a/src/error.c +++ b/src/error.c @@ -25,16 +25,22 @@ #include #include "alloc.h" #include "command.h" -#include "getline.h" +#include "getl.h" #include "glob.h" #include "lexer.h" #include "main.h" #include "output.h" +#include "progname.h" +#include "readln.h" #include "settings.h" #include "str.h" #include "var.h" #include "version.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) +#define N_(msgid) msgid + int err_error_count; int err_warning_count; @@ -42,9 +48,6 @@ int err_already_flagged; int err_verbosity; -/* File locator stack. */ -static const struct file_locator **file_loc; -static int nfile_loc, mfile_loc; /* Fairly common public functions. */ @@ -89,10 +92,10 @@ err_failure (void) fflush (stdout); fflush (stderr); - fprintf (stderr, "%s: %s\n", pgmname, + fprintf (stderr, "%s: %s\n", program_name, _("Terminating NOW due to a fatal error!")); - err_hcf (0); + terminate (false); } /* Terminate unless we're interactive or will go interactive when the @@ -100,7 +103,7 @@ err_failure (void) void err_cond_fail (void) { - if (getl_reading_script) + if (getl_reading_script ()) { if (getl_interactive) getl_close_all (); @@ -109,46 +112,6 @@ err_cond_fail (void) } } -/* File locator stack functions. */ - -/* Pushes F onto the stack of file locations. */ -void -err_push_file_locator (const struct file_locator *f) -{ - if (nfile_loc >= mfile_loc) - { - if (mfile_loc == 0) - mfile_loc = 8; - else - mfile_loc *= 2; - - file_loc = xrealloc (file_loc, mfile_loc * sizeof *file_loc); - } - - file_loc[nfile_loc++] = f; -} - -/* Pops F off the stack of file locations. - Argument F is only used for verification that that is actually the - item on top of the stack. */ -void -err_pop_file_locator (const struct file_locator *f) -{ - assert (nfile_loc >= 0 && file_loc[nfile_loc - 1] == f); - nfile_loc--; -} - -/* Puts the current file and line number in F, or NULL and -1 if - none. */ -void -err_location (struct file_locator *f) -{ - if (nfile_loc) - *f = *file_loc[nfile_loc - 1]; - else - getl_location (&f->filename, &f->line_number); -} - /* Obscure public functions. */ /* Writes a blank line to the error device(s). @@ -189,31 +152,18 @@ err_check_count (void) #define EXIT_FAILURE 1 #endif -static int terminating; +static void puts_stdout (const char *s); +static void dump_message (char *errbuf, unsigned indent, + void (*func) (const char *), unsigned width); -/* Halt-catch-fire. SUCCESS should be nonzero if exiting successfully - or zero if not. Despite the name, this is the usual way to finish, - successfully or not. */ void -err_hcf (int success) +err_done (void) { - terminating = 1; - lex_done(); getl_uninitialize (); - - free(file_loc); - outp_done (); - done_glob(); - - - exit (success ? EXIT_SUCCESS : EXIT_FAILURE); + readln_uninitialize(); } -static void puts_stdout (const char *s); -static void dump_message (char *errbuf, unsigned indent, - void (*func) (const char *), unsigned width); - void err_vmsg (const struct error *e, const char *format, va_list args) { @@ -298,8 +248,8 @@ err_vmsg (const struct error *e, const char *format, va_list args) ds_destroy (&msg); - if (e->class == FE && !terminating) - err_hcf (0); + if (e->class == FE) + terminate (0); } /* Private functions. */ @@ -510,7 +460,9 @@ request_bug_report_and_abort(const char *msg ) "default_config_path: %s\n" "include_path: %s\n" "groff_font_path: %s\n" - "locale_dir: %s\n", + "locale_dir: %s\n" + "compiler version: %s\n" + , bare_version, version, @@ -520,7 +472,13 @@ request_bug_report_and_abort(const char *msg ) default_config_path, include_path, groff_font_path, - locale_dir); + locale_dir, +#ifdef __VERSION__ + __VERSION__ +#else + "Unknown" +#endif + ); if ( msg ) fprintf(stderr,"Diagnosis: %s\n",msg);