Some framework for code generation.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@23180 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
		
							
								
								
									
										67
									
								
								lib/asn1/code.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								lib/asn1/code.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,67 @@ | ||||
|  | ||||
| #include "der_locl.h" | ||||
|  | ||||
| enum prim_opcode { | ||||
|     HAP_BOOLEAN = 0 | ||||
| }; | ||||
|  | ||||
| typedef size_t (*op_length)(const void *); | ||||
| typedef int    (*op_get)(const unsigned char *, size_t, void *, size_t *); | ||||
| typedef int    (*op_put)(unsigned char *, size_t, const void *, size_t *); | ||||
| typedef int    (*op_release)(void *); | ||||
| typedef int    (*op_parse)(const char *, void *); | ||||
| typedef size_t (*op_print)(const void *, char *, size_t); | ||||
|  | ||||
| /* flags */ | ||||
| #define OPTIONAL 1 | ||||
|  | ||||
| struct op { | ||||
|     /* must implement */ | ||||
|     int         dertype; | ||||
|     const char *name; | ||||
|     size_t	datasize; | ||||
|     op_length   length; | ||||
|     op_get      get; | ||||
|     op_put      put; | ||||
|     op_release  release; | ||||
|     /* may implement */ | ||||
|     op_parse    parse; | ||||
|     op_print    print; | ||||
| }; | ||||
|  | ||||
| /* primitive operatators */ | ||||
|  | ||||
| struct op pops[] = { | ||||
|     { | ||||
| 	UT_EndOfContent, | ||||
| 	"EndOfContent" | ||||
|     }, | ||||
|     { | ||||
| 	UT_Boolean, | ||||
| 	"boolean", | ||||
| 	sizeof(int), | ||||
| 	(op_length)der_length_boolean, | ||||
| 	(op_get)der_get_boolean, | ||||
| 	(op_put)der_put_boolean, | ||||
| 	(op_release)der_free_generic, | ||||
| 	NULL, | ||||
| 	NULL | ||||
|     } | ||||
| }; | ||||
|  | ||||
| int | ||||
| asn1code_decode_type(unsigned int op, | ||||
| 		     const unsigned char *in, size_t len, | ||||
| 		     void *data, size_t *size); | ||||
|  | ||||
|  | ||||
|  | ||||
| int | ||||
| asn1code_decode_type(unsigned int op, | ||||
| 		     const unsigned char *in, size_t len, | ||||
| 		     void *data, size_t *size) | ||||
| { | ||||
|     if (op > sizeof(pops)/sizeof(pops[0])) | ||||
| 	return -1; | ||||
|     return (pops[op].get)(in, len, data, size); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Love Hörnquist Åstrand
					Love Hörnquist Åstrand