X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fmessage.c;h=b3025156ef0dd33703068e03b1847316a903eecb;hb=f51ecb48027e6b1eb46840ae25888a25b429f012;hp=5faee1f1d6c8dc33279e36acc9b3188b56b1f218;hpb=9e0e4996fad6563f0a1ce628b80db5c23ef8279e;p=pspp-builds.git diff --git a/src/libpspp/message.c b/src/libpspp/message.c index 5faee1f1..b3025156 100644 --- a/src/libpspp/message.c +++ b/src/libpspp/message.c @@ -79,19 +79,27 @@ msg_done (void) struct msg * msg_dup(const struct msg *m) { - struct msg *new_msg = xmalloc (sizeof *m); + struct msg *new_msg; - *new_msg = *m; - new_msg->text = xstrdup(m->text); + new_msg = xmemdup (m, sizeof *m); + if (m->where.file_name != NULL) + new_msg->where.file_name = xstrdup (m->where.file_name); + new_msg->text = xstrdup (m->text); return new_msg; } +/* Frees a message created by msg_dup(). + + (Messages not created by msg_dup(), as well as their where.file_name + members, are typically not dynamically allocated, so this function should + not be used to destroy them.) */ void -msg_destroy(struct msg *m) +msg_destroy (struct msg *m) { - free(m->text); - free(m); + free (m->where.file_name); + free (m->text); + free (m); } /* Emits M as an error message. @@ -101,6 +109,11 @@ msg_emit (struct msg *m) { if ( s_stream ) get_msg_location (s_stream, &m->where); + else + { + m->where.file_name = NULL; + m->where.line_number = -1; + } if (!messages_disabled) msg_handler (m); @@ -157,8 +170,6 @@ request_bug_report_and_abort (const char *msg) fprintf (stderr, "version: %s\n", stat_version); fprintf (stderr, "host_system: %s\n", host_system); fprintf (stderr, "build_system: %s\n", build_system); - fprintf (stderr, "default_config_path: %s\n", default_config_path); - fprintf (stderr, "include_path: %s\n", include_path); fprintf (stderr, "locale_dir: %s\n", locale_dir); fprintf (stderr, "compiler version: %s\n", #ifdef __VERSION__