+ if ( xtr == NULL)
+ goto error;
+
+ r = xzalloc (sizeof *r);
+ r->xtr = xtr;
+ r->spreadsheet.type = SPREADSHEET_ODS;
+ r->spreadsheet.sheets = sheet_count;
+
+ ds_destroy (&errs);
+
+ return &r->spreadsheet;
+
+ error:
+ zip_reader_destroy (zreader);
+ ds_destroy (&errs);
+ return NULL;
+}
+
+struct casereader *
+ods_make_reader (struct spreadsheet *spreadsheet,
+ const struct spreadsheet_read_info *gri, struct spreadsheet_read_options *opts)
+{
+ intf ret = 0;
+ xmlChar *type = NULL;
+ unsigned long int vstart = 0;
+ casenumber n_cases = CASENUMBER_MAX;
+ int i;
+ struct var_spec *var_spec = NULL;
+ int n_var_specs = 0;
+
+ struct ods_reader *r = (struct ods_reader *) spreadsheet;
+ xmlChar *val_string = NULL;
+
+ assert (r);
+ r->read_names = gri->read_names;
+ ds_init_empty (&r->ods_errs);