X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flibpspp%2Fmessage.c;h=b3025156ef0dd33703068e03b1847316a903eecb;hb=f51ecb48027e6b1eb46840ae25888a25b429f012;hp=227109145528d318f3963e7b3e295d11ef8602e9;hpb=7fbfc32fc3c636959b0a25b3e76609f86519e84a;p=pspp-builds.git diff --git a/src/libpspp/message.c b/src/libpspp/message.c index 22710914..b3025156 100644 --- a/src/libpspp/message.c +++ b/src/libpspp/message.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 1997-9, 2000, 2006 Free Software Foundation, Inc. + Copyright (C) 1997-9, 2000, 2006, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -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 = strdup(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__