projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
message: Make msg_emit() take full ownership of its argument.
[pspp]
/
src
/
data
/
sys-file-reader.c
diff --git
a/src/data/sys-file-reader.c
b/src/data/sys-file-reader.c
index b5fdfd7f206c798b8d9b0012dc1a28445507a445..f11480ac8f76c6bc2a3c72ac6a33519bbe971e48 100644
(file)
--- a/
src/data/sys-file-reader.c
+++ b/
src/data/sys-file-reader.c
@@
-1,5
+1,5
@@
/* PSPP - a program for statistical analysis.
/* PSPP - a program for statistical analysis.
- Copyright (C) 1997-2000, 2006-2007, 2009-2016 Free Software Foundation, Inc.
+ Copyright (C) 1997-2000, 2006-2007, 2009-2016
, 2021
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
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
@@
-493,10
+493,7
@@
read_record (struct sfm_reader *r, int type,
case 6:
if (r->document != NULL)
case 6:
if (r->document != NULL)
- {
- sys_error (r, r->pos, _("Duplicate type 6 (document) record."));
- return false;
- }
+ sys_warn (r, r->pos, _("Duplicate type 6 (document) record."));
return read_document_record (r);
case 7:
return read_document_record (r);
case 7:
@@
-643,6
+640,13
@@
add_id (struct get_strings_aux *aux, const char *id, const char *title, ...)
va_end (args);
}
va_end (args);
}
+static const char *
+skip_prefix (const char *s, const char *prefix)
+{
+ size_t prefix_len = strlen (prefix);
+ return !strncmp (s, prefix, prefix_len) ? s + prefix_len : s;
+}
+
/* Retrieves significant string data from R in its raw format, to allow the
caller to try to detect the encoding in use.
/* Retrieves significant string data from R in its raw format, to allow the
caller to try to detect the encoding in use.
@@
-692,7
+696,7
@@
sfm_get_strings (const struct any_reader *r_, struct pool *pool,
add_string (&aux, r->header.creation_date, _("Creation Date"));
add_string (&aux, r->header.creation_time, _("Creation Time"));
add_string (&aux, r->header.creation_date, _("Creation Date"));
add_string (&aux, r->header.creation_time, _("Creation Time"));
- add_string (&aux,
r->header.eye_catcher
, _("Product"));
+ add_string (&aux,
skip_prefix (r->header.eye_catcher, "@(#) ")
, _("Product"));
add_string (&aux, r->header.file_label, _("File Label"));
if (r->extensions[EXT_PRODUCT_INFO])
add_string (&aux, r->header.file_label, _("File Label"));
if (r->extensions[EXT_PRODUCT_INFO])
@@
-991,7
+995,7
@@
read_header (struct sfm_reader *r, struct any_read_info *info,
r->compression = ANY_COMP_NONE;
else if (compressed == 1)
r->compression = ANY_COMP_SIMPLE;
r->compression = ANY_COMP_NONE;
else if (compressed == 1)
r->compression = ANY_COMP_SIMPLE;
- else
if (compressed != 0)
+ else
{
sys_error (r, 0, "System file header has invalid compression "
"value %d.", compressed);
{
sys_error (r, 0, "System file header has invalid compression "
"value %d.", compressed);
@@
-1690,9
+1694,9
@@
parse_mrsets (struct sfm_reader *r, const struct sfm_extension_record *record,
text = open_text_record (r, record, false);
for (;;)
{
text = open_text_record (r, record, false);
for (;;)
{
- struct sfm_mrset *mrset;
- size_t allocated_vars;
- char delimiter;
+ struct sfm_mrset *mrset
= NULL
;
+ size_t allocated_vars
= 0
;
+ char delimiter
= '4'
;
/* Skip extra line feeds if present. */
while (text_match (text, '\n'))
/* Skip extra line feeds if present. */
while (text_match (text, '\n'))
@@
-1995,7
+1999,7
@@
rename_var_and_save_short_names (struct sfm_reader *r, off_t pos,
for (i = 0; i < n_short_names; i++)
{
const char *s = var_get_short_name (var, i);
for (i = 0; i < n_short_names; i++)
{
const char *s = var_get_short_name (var, i);
- short_names[i] =
s != NULL ? xstrdup (s) : NULL
;
+ short_names[i] =
xstrdup_if_nonnull (s)
;
}
/* Set long name. */
}
/* Set long name. */
@@
-3122,7
+3126,11
@@
text_get_token (struct text_record *text, struct substring delimiters,
char *end;
if (!ss_tokenize (text->buffer, delimiters, &text->pos, &token))
char *end;
if (!ss_tokenize (text->buffer, delimiters, &text->pos, &token))
- return NULL;
+ {
+ if (delimiter != NULL)
+ *delimiter = ss_data (text->buffer)[text->pos-1];
+ return NULL;
+ }
end = &ss_data (token)[ss_length (token)];
if (delimiter != NULL)
end = &ss_data (token)[ss_length (token)];
if (delimiter != NULL)
@@
-3236,12
+3244,13
@@
sys_msg (struct sfm_reader *r, off_t offset,
ds_put_format (&text, _("`%s': "), fh_get_file_name (r->fh));
ds_put_vformat (&text, format, args);
ds_put_format (&text, _("`%s': "), fh_get_file_name (r->fh));
ds_put_vformat (&text, format, args);
- struct msg m = {
+ struct msg *m = xmalloc (sizeof *m);
+ *m = (struct msg) {
.category = msg_class_to_category (class),
.severity = msg_class_to_severity (class),
.category = msg_class_to_category (class),
.severity = msg_class_to_severity (class),
- .text = ds_cstr (&text),
+ .text = ds_
steal_
cstr (&text),
};
};
- msg_emit (
&
m);
+ msg_emit (m);
}
/* Displays a warning for offset OFFSET in the file. */
}
/* Displays a warning for offset OFFSET in the file. */