 372881f5ef
			
		
	
	372881f5ef
	
	
	
		
			
			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");
 | |
| }
 | |
| 
 |