git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1843 ec53bebd-3082-4978-b11e-865c3cabbd6b
		
			
				
	
	
		
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#include "asn1_locl.h"
 | 
						|
 | 
						|
RCSID("$Id$");
 | 
						|
 | 
						|
void
 | 
						|
generate_type_maybe (Symbol *s)
 | 
						|
{
 | 
						|
    fprintf (headerfile,
 | 
						|
	     "int maybe_%s(unsigned char *, int);\n",
 | 
						|
	     s->gen_name);
 | 
						|
 | 
						|
    fprintf (codefile, "int\n"
 | 
						|
	     "maybe_%s(unsigned char *p, int len)\n"
 | 
						|
	     "{\n    ", 
 | 
						|
	     s->gen_name);
 | 
						|
  
 | 
						|
    switch (s->type->type) {
 | 
						|
    case TInteger:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, UNIV, "
 | 
						|
		 "PRIM, UT_Integer) >= 0;\n");
 | 
						|
	break;
 | 
						|
    case TOctetString:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, UNIV, "
 | 
						|
		 "PRIM, UT_OctetString) >= 0;\n");
 | 
						|
	break;
 | 
						|
    case TGeneralizedTime:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, UNIV, "
 | 
						|
		 "PRIM, UT_GeneralizedTime) >= 0;\n");
 | 
						|
	break;
 | 
						|
    case TGeneralString:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, UNIV, "
 | 
						|
		 "PRIM, UT_GeneralString) >= 0;\n");
 | 
						|
	break;
 | 
						|
    case TBitString:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, UNIV, "
 | 
						|
		 "PRIM, UT_BitString) >= 0;\n");
 | 
						|
	break;
 | 
						|
	
 | 
						|
    case TSequence:
 | 
						|
    case TSequenceOf:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, UNIV, "
 | 
						|
		 "CONS, UT_Sequence) >= 0;\n");
 | 
						|
	break;
 | 
						|
    case TApplication:
 | 
						|
	fprintf (codefile, "return der_match_tag (p, len, APPL, "
 | 
						|
		 "CONS, %d) >= 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");
 | 
						|
}
 | 
						|
 |