/* PSPP - a program for statistical analysis.
- Copyright (C) 2011, 2012, 2013, 2016, 2020 Free Software Foundation, Inc.
+ Copyright (C) 2011, 2012, 2013, 2016, 2020, 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
struct string ods_errs;
- struct string zip_errs;
struct hmap cache;
};
{
struct hmap_node node;
- /* The the number of the sheet. */
+ /* The number of the sheet. */
int sheet;
/* The cell's row. */
dict_unref (r->spreadsheet.dict);
- zip_reader_destroy (r->zreader);
+ zip_reader_unref (r->zreader);
free (r->spreadsheet.sheets);
free (s->file_name);
{
memset (sd, 0, sizeof (*sd));
- sd->zm = zip_member_open (r->zreader, "content.xml");
-
- if (sd->zm == NULL)
- return false;
+ char *error = zip_member_open (r->zreader, "content.xml", &sd->zm);
+ if (error)
+ {
+ free (error);
+ return false;
+ }
sd->xtr =
xmlReaderForIO (xml_reader_for_zip_member, NULL, sd->zm, NULL, NULL,
const char *text = xmv->value ?
CHAR_CAST (const char *, xmv->value) : CHAR_CAST (const char *, xmv->text);
- char *m = data_in (ss_cstr (text), "UTF-8",
- fmt->type,
- v,
- var_get_width (var),
- "UTF-8");
+ char *m = data_in (ss_cstr (text), "UTF-8", fmt->type,
+ settings_get_fmt_settings (), v,
+ var_get_width (var), "UTF-8");
if (m)
{
{
xmlTextReaderPtr mxtr;
struct zip_member *meta = NULL;
- meta = zip_member_open (zreader, "meta.xml");
-
- if (meta == NULL)
- return -1;
+ char *error = zip_member_open (zreader, "meta.xml", &meta);
+ if (error)
+ {
+ free (error);
+ return -1;
+ }
mxtr = xmlReaderForIO (xml_reader_for_zip_member, NULL, meta, NULL, NULL, 0);
{
if (idx >= n_var_specs)
{
- var_spec = xrealloc (var_spec, sizeof (*var_spec) * (idx + 1));
+ var_spec = xrealloc (var_spec, sizeof (*var_spec) * (idx + r->rsd.col_span));
memset (var_spec + n_var_specs,
- 0,
- (idx - n_var_specs + 1) * sizeof (*var_spec));
+ 0,
+ (idx + r->rsd.col_span - n_var_specs) * sizeof (*var_spec));
var_spec [idx].name = NULL;
n_var_specs = idx + 1;
}
- var_spec [idx].firstval.type = type;
- var_spec [idx].firstval.text = xmlTextReaderValue (r->rsd.xtr);
- var_spec [idx].firstval.value = val_string;
+ for (int x = 0; x < r->rsd.col_span; ++x)
+ {
+ var_spec [idx - x].firstval.type = xmlStrdup (type);
+ var_spec [idx - x].firstval.text = xmlTextReaderValue (r->rsd.xtr);
+ var_spec [idx - x].firstval.value = xmlStrdup (val_string);
+ }
- val_string = NULL;
- type = NULL;
+ free (val_string);
+ free (type);
}
}
-
/* Create the dictionary and populate it */
r->spreadsheet.dict = dict_create (
CHAR_CAST (const char *, xmlTextReaderConstEncoding (r->rsd.xtr)));
r->rsd.node_type == XML_READER_TYPE_TEXT)
{
int col;
- struct xml_value *xmv = xzalloc (sizeof *xmv);
+ struct xml_value *xmv = XZALLOC (struct xml_value);
xmv->text = xmlTextReaderValue (r->rsd.xtr);
xmv->value = val_string;
val_string = NULL;
continue;
if (r->spreadsheet.stop_col != -1 && idx > r->spreadsheet.stop_col - r->spreadsheet.start_col)
break;
- if (idx >= dict_get_var_cnt (r->spreadsheet.dict))
+ if (idx >= dict_get_n_vars (r->spreadsheet.dict))
break;
var = dict_get_var (r->spreadsheet.dict, idx);
if (state)
{
- struct zip_member *content = zip_member_open (r->zreader, "content.xml");
+ struct zip_member *content;
+ char *error = zip_member_open (r->zreader, "content.xml", &content);
if (content == NULL)
- return NULL;
+ {
+ free (error);
+ return NULL;
+ }
xmlTextReaderPtr xtr = xmlReaderForIO (xml_reader_for_zip_member, NULL, content, NULL, NULL,
report_errors
struct spreadsheet *
ods_probe (const char *filename, bool report_errors)
{
- struct ods_reader *r = xzalloc (sizeof *r);
- struct zip_reader *zr;
-
- ds_init_empty (&r->zip_errs);
+ struct ods_reader *r = XZALLOC (struct ods_reader);
- zr = zip_reader_create (filename, &r->zip_errs);
-
- if (zr == NULL)
+ struct zip_reader *zr;
+ char *error = zip_reader_create (filename, &zr);
+ if (error)
{
if (report_errors)
{
msg (ME, _("Cannot open %s as a OpenDocument file: %s"),
- filename, ds_cstr (&r->zip_errs));
+ filename, error);
}
- ds_destroy (&r->zip_errs);
+ free (error);
free (r);
return NULL;
}
return &r->spreadsheet;
error:
- ds_destroy (&r->zip_errs);
- zip_reader_destroy (r->zreader);
+ zip_reader_unref (r->zreader);
free (r);
return NULL;
}