02111-1307, USA. */
#include <config.h>
-#include <assert.h>
#include "error.h"
#include <ctype.h>
#include <stdarg.h>
#include "settings.h"
#include "str.h"
#include "var.h"
+#include "version.h"
int err_error_count;
int err_warning_count;
{
struct string buf;
- ds_init (NULL, &buf, 1024);
+ ds_init (&buf, 1024);
/* Format the message into BUF. */
{
e.text = buf.string;
err_vmsg (&e);
}
+
+ ds_destroy (&buf);
}
/* Terminate due to fatal error in input. */
assert (class >= 0 && class < ERR_CLASS_COUNT);
assert (e->text != NULL);
- ds_init (NULL, &msg, 64);
+ ds_init (&msg, 64);
if (e->where.filename && (error_classes[class].flags & ERR_WITH_FILE))
{
ds_printf (&msg, "%s:", e->where.filename);
if (e->where.line_number != -1)
ds_printf (&msg, "%d:", e->where.line_number);
- ds_putchar (&msg, ' ');
+ ds_putc (&msg, ' ');
}
ds_printf (&msg, "%s: ", gettext (error_classes[class].banner));
ds_printf (&msg, "%s: ", cur_proc);
if (e->title)
- ds_concat (&msg, e->title);
+ ds_puts (&msg, e->title);
- ds_concat (&msg, e->text);
+ ds_puts (&msg, e->text);
/* FIXME: Check set_messages and set_errors to determine where to
send errors and messages.
Please note that this is not trivial. We have to avoid an
infinite loop in reporting errors that originate in the output
section. */
- dump_message (ds_value (&msg), 8, puts_stdout, get_viewwidth());
+ dump_message (ds_c_str (&msg), 8, puts_stdout, get_viewwidth());
ds_destroy (&msg);
local_free (buf);
}
+
+
+void
+request_bug_report_and_abort(const char *msg )
+{
+ fprintf(stderr,
+ "******************************************************************\n"
+ "You have discovered a bug in PSPP.\n\n"
+ " Please report this, by sending "
+ "an email to " PACKAGE_BUGREPORT ",\n"
+ "explaining what you were doing when this happened, and including\n"
+ "a sample of your input file which caused it.\n");
+
+ fprintf(stderr,
+ "Also, please copy the following lines into your bug report:\n\n"
+ "bare_version: %s\n"
+ "version: %s\n"
+ "stat_version: %s\n"
+ "host_system: %s\n"
+ "build_system: %s\n"
+ "default_config_path: %s\n"
+ "include_path: %s\n"
+ "groff_font_path: %s\n"
+ "locale_dir: %s\n",
+
+ bare_version,
+ version,
+ stat_version,
+ host_system,
+ build_system,
+ default_config_path,
+ include_path,
+ groff_font_path,
+ locale_dir);
+
+ if ( msg )
+ fprintf(stderr,"Diagnosis: %s\n",msg);
+
+ fprintf(stderr,
+ "******************************************************************\n");
+
+ abort();
+}
+
+void
+err_assert_fail(const char *expr, const char *file, int line)
+{
+ char msg[256];
+ snprintf(msg,256,"Assertion failed: %s:%d; (%s)",file,line,expr);
+ request_bug_report_and_abort( msg );
+}