projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dataset: Fix memory leak destroying a dataset that has a permanent_dict.
[pspp]
/
src
/
data
/
por-file-reader.c
diff --git
a/src/data/por-file-reader.c
b/src/data/por-file-reader.c
index 1dcbeac71c540eb81c9654d619b575f85367316b..b5cc35b825ba73c27ae015971fd249afdf9e749e 100644
(file)
--- a/
src/data/por-file-reader.c
+++ b/
src/data/por-file-reader.c
@@
-43,7
+43,6
@@
#include "libpspp/pool.h"
#include "libpspp/str.h"
#include "libpspp/pool.h"
#include "libpspp/str.h"
-#include "gl/intprops.h"
#include "gl/minmax.h"
#include "gl/xalloc.h"
#include "gl/xmemdup0.h"
#include "gl/minmax.h"
#include "gl/xalloc.h"
#include "gl/xmemdup0.h"
@@
-113,12
+112,13
@@
error (struct pfm_reader *r, const char *msg, ...)
ds_put_vformat (&text, msg, args);
va_end (args);
ds_put_vformat (&text, msg, args);
va_end (args);
- struct msg m = {
+ struct msg *m = xmalloc (sizeof *m);
+ *m = (struct msg) {
.category = MSG_C_GENERAL,
.severity = MSG_S_ERROR,
.category = MSG_C_GENERAL,
.severity = MSG_S_ERROR,
- .text = ds_cstr (&text),
+ .text = ds_
steal_
cstr (&text),
};
};
- msg_emit (
&
m);
+ msg_emit (m);
r->ok = false;
r->ok = false;
@@
-140,12
+140,13
@@
warning (struct pfm_reader *r, const char *msg, ...)
ds_put_vformat (&text, msg, args);
va_end (args);
ds_put_vformat (&text, msg, args);
va_end (args);
- struct msg m = {
+ struct msg *m = xmalloc (sizeof *m);
+ *m = (struct msg) {
.category = MSG_C_GENERAL,
.severity = MSG_S_WARNING,
.category = MSG_C_GENERAL,
.severity = MSG_S_WARNING,
- .text = ds_cstr (&text),
+ .text = ds_
steal_
cstr (&text),
};
};
- msg_emit (
&
m);
+ msg_emit (m);
}
/* Close and destroy R.
}
/* Close and destroy R.
@@
-729,9
+730,9
@@
read_variables (struct pfm_reader *r, struct dictionary *dict)
unsigned long int i;
for (i = 1; ; i++)
{
unsigned long int i;
for (i = 1; ; i++)
{
- char try_name[8 + 1 + INT_STRLEN_BOUND (i) + 1];
- sprintf (try_name, "%s_%lu", name, i);
+ char *try_name = xasprintf ("%s_%lu", name, i);
v = dict_create_var (dict, try_name, width);
v = dict_create_var (dict, try_name, width);
+ free (try_name);
if (v != NULL)
break;
}
if (v != NULL)
break;
}
@@
-900,7
+901,7
@@
por_file_casereader_read (struct casereader *reader, void *r_)
int width = caseproto_get_width (r->proto, i);
if (width == 0)
int width = caseproto_get_width (r->proto, i);
if (width == 0)
-
case_data_rw_idx (c, i)->f
= read_float (r);
+
*case_num_rw_idx (c, i)
= read_float (r);
else
{
uint8_t buf[256];
else
{
uint8_t buf[256];