X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=asn%2Fprt-exp.c;h=be6355d44159b8755905d3c3b45777263119aff5;hp=92499331187ae2ca3d04d5fc85bdb7a3bb4b353c;hb=b2d4fae21009b1909a35ef9ae6bcd27c1a5dca74;hpb=72592d242326dea9e05cae90d50348a2da0c0948 diff --git a/asn/prt-exp.c b/asn/prt-exp.c index 9249933..be6355d 100644 --- a/asn/prt-exp.c +++ b/asn/prt-exp.c @@ -4,7 +4,22 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: prt-exp.c,v $ - * Revision 1.2 1995-08-15 11:59:43 quinn + * Revision 1.7 1995-12-14 16:28:07 quinn + * More explain stuff. + * + * Revision 1.6 1995/12/14 11:09:09 quinn + * Fixed bug in tagging. + * + * Revision 1.5 1995/12/05 11:15:50 quinn + * Work. + * + * Revision 1.4 1995/09/29 17:11:54 quinn + * Smallish + * + * Revision 1.3 1995/09/27 15:02:42 quinn + * Modified function heads & prototypes. + * + * Revision 1.2 1995/08/15 11:59:43 quinn * Updated External * * Revision 1.1 1995/08/10 08:54:02 quinn @@ -125,10 +140,8 @@ int z_HumanStringUnit(ODR o, Z_HumanStringUnit **p, int opt) int z_HumanString(ODR o, Z_HumanString **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt && odr_ok(o); + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_HumanStringUnit, &(*p)->strings, &(*p)->num_strings)) return 1; @@ -161,10 +174,8 @@ int z_IconObjectUnit(ODR o, Z_IconObjectUnit **p, int opt) int z_IconObject(ODR o, Z_IconObject **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_IconObjectUnit, &(*p)->iconUnits, &(*p)->num_iconUnits)) return 1; @@ -230,10 +241,8 @@ int z_NetworkAddress(ODR o, Z_NetworkAddress **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; @@ -280,31 +289,29 @@ int z_AccessInfo(ODR o, Z_AccessInfo **p, int opt) int z_QueryTypeDetails(ODR o, Z_QueryTypeDetails **p, int opt) { - static Odr_arm arm[] = - { - {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_QueryTypeDetails_private, - z_PrivateCapabilities}, - {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryTypeDetails_rpn, - z_RpnCapabilities}, - {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_QueryTypeDetails_iso8777, - z_Iso8777Capabilities}, - {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_QueryTypeDetails_z3958, - z_HumanString}, - {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_QueryTypeDetails_erpn, - z_RpnCapabilities}, - {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_QueryTypeDetails_rankedList, - z_HumanString}, - {-1, -1, -1, -1, 0} - }; - - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; - if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) - return 1; - *p = 0; - return opt && odr_ok(o); + static Odr_arm arm[] = + { + {ODR_IMPLICIT, ODR_CONTEXT, 0, Z_QueryTypeDetails_private, + z_PrivateCapabilities}, + {ODR_IMPLICIT, ODR_CONTEXT, 1, Z_QueryTypeDetails_rpn, + z_RpnCapabilities}, + {ODR_IMPLICIT, ODR_CONTEXT, 2, Z_QueryTypeDetails_iso8777, + z_Iso8777Capabilities}, + {ODR_IMPLICIT, ODR_CONTEXT, 3, Z_QueryTypeDetails_z3958, + z_HumanString}, + {ODR_IMPLICIT, ODR_CONTEXT, 4, Z_QueryTypeDetails_erpn, + z_RpnCapabilities}, + {ODR_IMPLICIT, ODR_CONTEXT, 5, Z_QueryTypeDetails_rankedList, + z_HumanString}, + {-1, -1, -1, -1, 0} + }; + + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); + if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) + return 1; + *p = 0; + return opt && odr_ok(o); } int z_PrivateCapOperator(ODR o, Z_PrivateCapOperator **p, int opt) @@ -384,10 +391,8 @@ int z_ProxSupportUnit(ODR o, Z_ProxSupportUnit **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; @@ -431,10 +436,8 @@ int z_AccessRestrictionsUnit(ODR o, Z_AccessRestrictionsUnit **p, int opt) int z_AccessRestrictions(ODR o, Z_AccessRestrictions **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_AccessRestrictionsUnit, &(*p)->restrictions, &(*p)->num_restrictions)) return 1; @@ -481,10 +484,8 @@ int z_Charge(ODR o, Z_Charge **p, int opt) int z_DatabaseList(ODR o, Z_DatabaseList **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_DatabaseName, &(*p)->databases, &(*p)->num_databases)) return 1; @@ -507,10 +508,8 @@ int z_AttributeCombinations(ODR o, Z_AttributeCombinations **p, int opt) int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_AttributeOccurrence, &(*p)->occurrences, &(*p)->num_occurrences)) return 1; @@ -520,10 +519,8 @@ int z_AttributeCombination(ODR o, Z_AttributeCombination **p, int opt) int z_AttributeValueList(ODR o, Z_AttributeValueList **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_StringOrNumeric, &(*p)->attributes, &(*p)->num_attributes)) return 1; @@ -644,7 +641,7 @@ int z_DatabaseInfo(ODR o, Z_DatabaseInfo **p, int opt) odr_implicit(o, z_HumanString, &(*p)->disclaimers, ODR_CONTEXT, 12, 1) && odr_implicit(o, z_HumanString, &(*p)->news, ODR_CONTEXT, 13, 1) && - ((odr_constructed_begin(o, p, ODR_CONTEXT, 14) && + ((odr_constructed_begin(o, &(*p)->recordCount, ODR_CONTEXT, 14) && odr_choice(o, arm, &(*p)->recordCount, &(*p)->recordCount_which) && odr_constructed_end(o)) || odr_ok(o)) && odr_implicit(o, z_HumanString, &(*p)->defaultOrder, ODR_CONTEXT, @@ -730,10 +727,8 @@ int z_PathUnit(ODR o, Z_PathUnit **p, int opt) int z_Path(ODR o, Z_Path **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); odr_implicit_settag(o, ODR_CONTEXT, 201); if (odr_sequence_of(o, z_OtherInformationUnit, &(*p)->list, &(*p)->num)) @@ -744,10 +739,8 @@ int z_Path(ODR o, Z_Path **p, int opt) int z_ElementInfoList(ODR o, Z_Path **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); odr_implicit_settag(o, ODR_CONTEXT, 201); if (odr_sequence_of(o, z_OtherInformationUnit, &(*p)->list, &(*p)->num)) @@ -767,11 +760,8 @@ int z_ElementDataType(ODR o, Z_ElementDataType **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; - + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; @@ -1110,10 +1100,8 @@ int z_SortKeyDetailsSortType(ODR o, Z_SortKeyDetailsSortType **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; @@ -1210,10 +1198,8 @@ int z_VariantValue(ODR o, Z_VariantValue **p, int opt) int z_ValueSetEnumerated(ODR o, Z_ValueSetEnumerated **p, int opt) { - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_sequence_of(o, z_ValueDescription, &(*p)->enumerated, &(*p)->num_enumerated)) return 1; @@ -1231,10 +1217,8 @@ int z_ValueSet(ODR o, Z_ValueSet **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; @@ -1264,10 +1248,8 @@ int z_ValueDescription(ODR o, Z_ValueDescription **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt && odr_ok(o); + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0; @@ -1378,10 +1360,8 @@ int z_ExplainRecord(ODR o, Z_ExplainRecord **p, int opt) {-1, -1, -1, -1, 0} }; - if (o->direction == ODR_DECODE) - *p = odr_malloc(o, sizeof(**p)); - else if (!*p) - return opt; + if (!odr_initmember(o, p, sizeof(**p))) + return opt && odr_ok(o); if (odr_choice(o, arm, &(*p)->u, &(*p)->which)) return 1; *p = 0;