+static void set_charset_proposal(ODR odr, Z_InitRequest *req, const char *charset)
+{
+ Z_OtherInformation **p = &req->otherInfo;
+ Z_OtherInformationUnit *oi;
+
+ if (*p)
+ {
+ int i;
+ for (i = 0; i < (*p)->num_elements; i++)
+ {
+ Z_External *ext = (*p)->list[i]->information.externallyDefinedInfo;
+ if ((*p)->list[i]->which == Z_OtherInfo_externallyDefinedInfo
+ && ext &&
+ ext->which == Z_External_charSetandLanguageNegotiation)
+ return;
+ }
+ }
+ if ((oi = yaz_oi_update(p, odr, 0, 0, 0)))
+ {
+ ODR_MASK_SET(req->options, Z_Options_negotiationModel);
+ oi->which = Z_OtherInfo_externallyDefinedInfo;
+ oi->information.externallyDefinedInfo =
+ yaz_set_proposal_charneg_list(odr, ",",
+ charset,
+ 0 /* lang */,
+ 1 /* records included */);
+ }
+}
+