X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=asn%2Fproto.c;h=2cd5d94c14c2905509a003548cc703aebc6cb5dc;hp=a69d49bd88c851a8720e71f7d5c41736ae3f9e79;hb=1110373102ed65ffcaa5384aa0514516b162c543;hpb=78f86cdd3cc8d44fb8c4329e408a3aa679bd8b9e diff --git a/asn/proto.c b/asn/proto.c index a69d49b..2cd5d94 100644 --- a/asn/proto.c +++ b/asn/proto.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: proto.c,v $ - * Revision 1.30 1995-06-15 15:42:01 quinn + * Revision 1.31 1995-06-16 13:15:56 quinn + * Fixed Defaultdiagformat. + * + * Revision 1.30 1995/06/15 15:42:01 quinn * Fixed some v3 bugs * * Revision 1.29 1995/06/15 07:44:49 quinn @@ -125,6 +128,11 @@ int z_UserInformationField(ODR o, Odr_external **p, int opt) 11, opt); } +int z_InternationalString(ODR o, char **p, int opt) +{ + return odr_generalstring(o, p, opt); +} + int z_InfoCategory(ODR o, Z_InfoCategory **p, int opt) { if (!odr_sequence_begin(o, p, sizeof(**p))) @@ -724,6 +732,14 @@ int z_DatabaseRecord(ODR o, Z_DatabaseRecord **p, int opt) int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) { + static Odr_arm arm[] = + { + {-1, -1, -1, Z_DiagForm_v2AddInfo, odr_visiblestring}, + {-1, -1, -1, Z_DiagForm_v3AddInfo, z_InternationalString}, + {ODR_IMPLICIT, ODR_CONTEXT, ODR_VISIBLESTRING, Z_DiagForm_v2AddInfo, + odr_visiblestring}, /* to match some weird server.. */ + {-1, -1, -1, -1, 0} + }; if (!odr_sequence_begin(o, p, sizeof(**p))) return opt && odr_ok(o); return @@ -735,9 +751,7 @@ int z_DefaultDiagFormat(ODR o, Z_DefaultDiagFormat **p, int opt) * We need to turn it into a choice, or something, because of * that damn generalstring in v3. */ - (odr_visiblestring(o, &(*p)->addinfo, 0) || - odr_implicit(o, odr_cstring, &(*p)->addinfo, ODR_CONTEXT, - ODR_VISIBLESTRING, 1)) && + odr_choice(o, arm, &(*p)->addinfo, &(*p)->which) && odr_sequence_end(o); }