+// Initialize YAZ Map structures for MARC-based targets
+static int prepare_yazmarc(struct session_database *sdb)
+{
+ struct setting *s;
+
+ if (!sdb->settings)
+ {
+ yaz_log(YLOG_WARN, "No settings for %s", sdb->database->url);
+ return -1;
+ }
+ if ((s = sdb->settings[PZ_NATIVESYNTAX]) && !strncmp(s->value, "iso2709", 7))
+ {
+ char *encoding = "marc-8s", *e;
+ yaz_iconv_t cm;
+
+ // See if a native encoding is specified
+ if ((e = strchr(s->value, ';')))
+ encoding = e + 1;
+
+ sdb->yaz_marc = yaz_marc_create();
+ yaz_marc_subfield_str(sdb->yaz_marc, "\t");
+
+ cm = yaz_iconv_open("utf-8", encoding);
+ if (!cm)
+ {
+ yaz_log(YLOG_FATAL,
+ "Unable to map from %s to UTF-8 for target %s",
+ encoding, sdb->database->url);
+ return -1;
+ }
+ yaz_marc_iconv(sdb->yaz_marc, cm);
+ }
+ return 0;
+}
+
+// This analyzes settings and recomputes any supporting data structures
+// if necessary.
+static int prepare_session_database(struct session_database *sdb)
+{
+ if (!sdb->settings)
+ {
+ yaz_log(YLOG_WARN, "No settings associates with %s", sdb->database->url);
+ return -1;
+ }
+ if (sdb->settings[PZ_NATIVESYNTAX] && !sdb->yaz_marc)
+ {
+ if (prepare_yazmarc(sdb) < 0)
+ return -1;
+ }
+ if (sdb->settings[PZ_XSLT] && !sdb->map)
+ {
+ }
+ return 0;
+}
+