projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
message: Make msg_dup() copy and msg_destroy() free the file name.
[pspp-builds.git]
/
src
/
libpspp
/
message.c
diff --git
a/src/libpspp/message.c
b/src/libpspp/message.c
index 5faee1f1d6c8dc33279e36acc9b3188b56b1f218..2cd0bff5911ee915c7545503e18f112b4cfd81e1 100644
(file)
--- 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 *
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;
}
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
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.
}
/* Emits M as an error message.