X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fmessage.c;h=2cd0bff5911ee915c7545503e18f112b4cfd81e1;hb=e2a7ada9e445ab2b1fd473345709c39157f30b9a;hp=5faee1f1d6c8dc33279e36acc9b3188b56b1f218;hpb=3e30fb40d64fcf006b327a5f81934c14ef842111;p=pspp-builds.git diff --git a/src/libpspp/message.c b/src/libpspp/message.c index 5faee1f1..2cd0bff5 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.