
argument, that they return the size in. Return values are zero for success, and anything else (such as some ASN1_* constant) for error. git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1951 ec53bebd-3082-4978-b11e-865c3cabbd6b
59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
#include "asn1_locl.h"
|
|
|
|
RCSID("$Id$");
|
|
|
|
void
|
|
generate_type_maybe (Symbol *s)
|
|
{
|
|
fprintf (headerfile,
|
|
"int maybe_%s(unsigned char *, size_t);\n",
|
|
s->gen_name);
|
|
|
|
fprintf (codefile, "int\n"
|
|
"maybe_%s(unsigned char *p, size_t len)\n"
|
|
"{\n "
|
|
"size_t size;\n ",
|
|
s->gen_name);
|
|
|
|
switch (s->type->type) {
|
|
case TInteger:
|
|
fprintf (codefile, "return der_match_tag (p, len, UNIV, "
|
|
"PRIM, UT_Integer, &size) == 0;\n");
|
|
break;
|
|
case TOctetString:
|
|
fprintf (codefile, "return der_match_tag (p, len, UNIV, "
|
|
"PRIM, UT_OctetString, &size) == 0;\n");
|
|
break;
|
|
case TGeneralizedTime:
|
|
fprintf (codefile, "return der_match_tag (p, len, UNIV, "
|
|
"PRIM, UT_GeneralizedTime, &size) == 0;\n");
|
|
break;
|
|
case TGeneralString:
|
|
fprintf (codefile, "return der_match_tag (p, len, UNIV, "
|
|
"PRIM, UT_GeneralString, &size) == 0;\n");
|
|
break;
|
|
case TBitString:
|
|
fprintf (codefile, "return der_match_tag (p, len, UNIV, "
|
|
"PRIM, UT_BitString, &size) == 0;\n");
|
|
break;
|
|
|
|
case TSequence:
|
|
case TSequenceOf:
|
|
fprintf (codefile, "return der_match_tag (p, len, UNIV, "
|
|
"CONS, UT_Sequence, &size) == 0;\n");
|
|
break;
|
|
case TApplication:
|
|
fprintf (codefile, "return der_match_tag (p, len, APPL, "
|
|
"CONS, %d, &size) == 0;\n", s->type->application);
|
|
break;
|
|
case TType:
|
|
fprintf (codefile, "return maybe_%s(p, len) == 0;\n",
|
|
s->type->symbol->gen_name);
|
|
break;
|
|
default:
|
|
abort ();
|
|
}
|
|
fprintf (codefile, "}\n\n");
|
|
}
|
|
|