struct string ods_errs;
- struct string zip_errs;
struct hmap cache;
};
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,
{
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 (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
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);
-
- 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;
}