asn1: Revert heim_object_t support
This commit is contained in:
		 Nicolas Williams
					Nicolas Williams
				
			
				
					committed by
					
						 Nico Williams
						Nico Williams
					
				
			
			
				
	
			
			
			 Nico Williams
						Nico Williams
					
				
			
						parent
						
							327ec7e75c
						
					
				
				
					commit
					4748f3a19d
				
			| @@ -25,13 +25,11 @@ endif | ||||
| libasn1_la_LIBADD = \ | ||||
| 	libasn1base.la \ | ||||
| 	@LIB_com_err@ \ | ||||
| 	$(LIB_heimbase) \ | ||||
| 	$(LIBADD_roken) | ||||
|  | ||||
| libasn1template_la_LIBADD = \ | ||||
| 	libasn1base.la \ | ||||
| 	@LIB_com_err@ \ | ||||
| 	$(LIB_heimbase) \ | ||||
| 	$(LIBADD_roken) | ||||
|  | ||||
| BUILT_SOURCES =			\ | ||||
| @@ -192,12 +190,10 @@ check_timegm_LDADD = $(check_der_LDADD) | ||||
|  | ||||
| check_gen_template_LDADD = \ | ||||
| 	libasn1template.la \ | ||||
| 	$(LIB_heimbase) \ | ||||
| 	$(LIB_roken) | ||||
|  | ||||
| check_gen_LDADD = \ | ||||
| 	libasn1template.la \ | ||||
| 	$(LIB_heimbase) \ | ||||
| 	$(LIB_roken) | ||||
|  | ||||
| check_ber_LDADD = $(check_gen_LDADD) | ||||
|   | ||||
| @@ -1028,12 +1028,6 @@ DESCRIPTION | ||||
| 	     ple, one might decorate a request type with state needed during | ||||
| 	     processing of the request. | ||||
|  | ||||
|      --decorate=ASN1-TYPE:heim_object_t:fname | ||||
| 	     Add to the C struct generated for the given ASN.1 SET or SEQUENCE | ||||
| 	     type named ASN1-TYPE a “hidden” field named fname of C type | ||||
| 	     ‘heim_object_t’ values of which will be copied and released with | ||||
| 	     ‘heim_retain()’ and ‘heim_release()’ respectively. | ||||
|  | ||||
|      --decorate=ASN1-TYPE:void*:fname | ||||
| 	     Add to the C struct generated for the given ASN.1 SET, SEQUENCE, | ||||
| 	     or CHOICE type named ASN1-TYPE a “hidden” field named fname of | ||||
|   | ||||
| @@ -150,7 +150,6 @@ | ||||
| #define A1_FLAG_OPTIONAL	(0x01000000) | ||||
| #define A1_FLAG_IMPLICIT	(0x02000000) | ||||
| #define A1_FLAG_DEFAULT		(0x04000000) | ||||
| #define A1_FLAG_HEIM_OBJ	(0x08000000) | ||||
|  | ||||
| #define A1_TAG_T(CLASS,TYPE,TAG)	((A1_OP_TAG) | (((CLASS) << 22) | ((TYPE) << 21) | (TAG))) | ||||
| #define A1_TAG_CLASS(x)		(((x) >> 22) & 0x3) | ||||
|   | ||||
| @@ -258,21 +258,6 @@ used for internal bookkeeping but which do not affect | ||||
| interoperability because they are neither encoded nor decoded. | ||||
| For example, one might decorate a request type with state needed | ||||
| during processing of the request. | ||||
| .It Fl Fl decorate=ASN1-TYPE:heim_object_t:fname | ||||
| Add to the C struct generated for the given ASN.1 SET or SEQUENCE type | ||||
| named | ||||
| .Ar ASN1-TYPE | ||||
| a | ||||
| .Dq hidden | ||||
| field named | ||||
| .Ar fname | ||||
| of C type | ||||
| .Sq heim_object_t | ||||
| values of which will be copied and released with | ||||
| .Sq heim_retain() | ||||
| and | ||||
| .Sq heim_release() | ||||
| respectively. | ||||
| .It Fl Fl decorate=ASN1-TYPE:void*:fname | ||||
| Add to the C struct generated for the given ASN.1 SET, SEQUENCE, or | ||||
| CHOICE type named | ||||
|   | ||||
| @@ -1053,7 +1053,6 @@ test_decorated(void) | ||||
|     td.version = 3; | ||||
|     td.version3.v = 5; | ||||
|     td.privthing = &td; | ||||
|     td.privobj = heim_string_create("foo"); | ||||
|     if ((td.version2 = malloc(sizeof(*td.version2))) == NULL) | ||||
|         errx(1, "out of memory"); | ||||
|     *td.version2 = 5; | ||||
| @@ -1097,10 +1096,6 @@ test_decorated(void) | ||||
|         warnx("copy_TESTDecorated() did not work correctly (4)"); | ||||
|         return 1; | ||||
|     } | ||||
|     if (td_copy.privobj != td.privobj) { | ||||
|         warnx("copy_TESTDecorated() did not work correctly (5)"); | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|     free_TESTDecorated(&td_copy); | ||||
|     free_TESTDecorated(&td); | ||||
| @@ -1116,10 +1111,6 @@ test_decorated(void) | ||||
|         warnx("free_TESTDecorated() did not work correctly (3)"); | ||||
|         return 1; | ||||
|     } | ||||
|     if (td.privobj != 0) { | ||||
|         warnx("free_TESTDecorated() did not work correctly (4)"); | ||||
|         return 1; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
| @@ -1142,7 +1133,6 @@ test_decorated_choice(void) | ||||
|     tdc.u.version = 3; | ||||
|     tdc.version3.v = 5; | ||||
|     tdc.privthing = &tdc; | ||||
|     tdc.privobj = heim_string_create("foo"); | ||||
|     if ((tdc.version2 = malloc(sizeof(*tdc.version2))) == NULL) | ||||
|         errx(1, "out of memory"); | ||||
|     *tdc.version2 = 5; | ||||
| @@ -1188,10 +1178,6 @@ test_decorated_choice(void) | ||||
|         warnx("copy_TESTDecoratedChoice() did not work correctly (4)"); | ||||
|         return 1; | ||||
|     } | ||||
|     if (tdc_copy.privobj != tdc.privobj) { | ||||
|         warnx("copy_TESTDecoratedChoice() did not work correctly (5)"); | ||||
|         return 1; | ||||
|     } | ||||
|  | ||||
|     free_TESTDecoratedChoice(&tdc_copy); | ||||
|     free_TESTDecoratedChoice(&tdc); | ||||
| @@ -1207,10 +1193,6 @@ test_decorated_choice(void) | ||||
|         warnx("free_TESTDecoratedChoice() did not work correctly (3)"); | ||||
|         return 1; | ||||
|     } | ||||
|     if (tdc.privobj != 0) { | ||||
|         warnx("free_TESTDecoratedChoice() did not work correctly (4)"); | ||||
|         return 1; | ||||
|     } | ||||
|     return 0; | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1436,7 +1436,7 @@ define_type(int level, const char *name, const char *basename, Type *pt, Type *t | ||||
|             fprintf(jsonfile, "%s{" | ||||
|                     "\"type\":\"%s\",\"name\":\"%s\",\"optional\":%s," | ||||
|                     "\"external\":%s,\"pointer\":%s,\"void_star\":%s," | ||||
|                     "\"struct_star\":%s,\"heim_object\":%s," | ||||
|                     "\"struct_star\":%s," | ||||
|                     "\"copy_function\":\"%s\"," | ||||
|                     "\"free_function\":\"%s\",\"header_name\":%s%s%s" | ||||
|                     "}", | ||||
| @@ -1444,7 +1444,7 @@ define_type(int level, const char *name, const char *basename, Type *pt, Type *t | ||||
|                     deco.field_type, deco.field_name, | ||||
|                     deco.opt ? "true" : "false", deco.ext ? "true" : "false", | ||||
|                     deco.ptr ? "true" : "false", deco.void_star ? "true" : "false", | ||||
|                     deco.struct_star ? "true" : "false", deco.heim_object ? "true" : "false", | ||||
|                     deco.struct_star ? "true" : "false", | ||||
|                     deco.copy_function_name ? deco.copy_function_name : "", | ||||
|                     deco.free_function_name ? deco.free_function_name : "", | ||||
|                     deco.header_name && deco.header_name[0] == '"' ? "" : "\"", | ||||
| @@ -1578,7 +1578,7 @@ define_type(int level, const char *name, const char *basename, Type *pt, Type *t | ||||
|             fprintf(jsonfile, "%s{" | ||||
|                     "\"type\":\"%s\",\"name\":\"%s\",\"optional\":%s," | ||||
|                     "\"external\":%s,\"pointer\":%s,\"void_star\":%s," | ||||
|                     "\"struct_star\":%s,\"heim_object\":%s," | ||||
|                     "\"struct_star\":%s," | ||||
|                     "\"copy_function\":\"%s\"," | ||||
|                     "\"free_function\":\"%s\",\"header_name\":%s%s%s" | ||||
|                     "}", | ||||
| @@ -1586,7 +1586,7 @@ define_type(int level, const char *name, const char *basename, Type *pt, Type *t | ||||
|                     deco.field_type, deco.field_name, | ||||
|                     deco.opt ? "true" : "false", deco.ext ? "true" : "false", | ||||
|                     deco.ptr ? "true" : "false", deco.void_star ? "true" : "false", | ||||
|                     deco.struct_star ? "true" : "false", deco.heim_object ? "true" : "false", | ||||
|                     deco.struct_star ? "true" : "false", | ||||
|                     deco.copy_function_name ? deco.copy_function_name : "", | ||||
|                     deco.free_function_name ? deco.free_function_name : "", | ||||
|                     deco.header_name && deco.header_name[0] == '"' ? "" : "\"", | ||||
|   | ||||
| @@ -242,10 +242,7 @@ generate_type_copy (const Symbol *s) | ||||
| 	   s->gen_name, s->gen_name, s->gen_name); | ||||
|   copy_type ("from", "to", s->type, preserve); | ||||
|   while (decorate_type(s->gen_name, &deco, &more_deco)) { | ||||
|       if (deco.heim_object) { | ||||
|           fprintf(codefile, "(to)->%s = heim_retain((from)->%s);\n", | ||||
|                   deco.field_name, deco.field_name); | ||||
|       } else if (deco.ext && deco.copy_function_name == NULL) { | ||||
|       if (deco.ext && deco.copy_function_name == NULL) { | ||||
|           /* Decorated with field of external type but no copy function */ | ||||
|           if (deco.ptr) | ||||
|               fprintf(codefile, "(to)->%s = 0;\n", deco.field_name); | ||||
|   | ||||
| @@ -190,10 +190,7 @@ generate_type_free (const Symbol *s) | ||||
|  | ||||
|     free_type ("data", s->type, preserve); | ||||
|     while (decorate_type(s->gen_name, &deco, &more_deco)) { | ||||
|         if (deco.heim_object) { | ||||
|             fprintf(codefile, "heim_release((data)->%s);\n", deco.field_name); | ||||
|             fprintf(codefile, "(data)->%s = 0;\n", deco.field_name); | ||||
|         } else if (deco.ext && deco.free_function_name == NULL) { | ||||
|         if (deco.ext && deco.free_function_name == NULL) { | ||||
|             /* Decorated with field of external type but no free function */ | ||||
|             if (deco.ptr) | ||||
|                 fprintf(codefile, "(data)->%s = 0;\n", deco.field_name); | ||||
|   | ||||
| @@ -158,7 +158,6 @@ struct decoration { | ||||
|     unsigned int ptr:1;         /* external, pointer */ | ||||
|     unsigned int void_star:1;   /* external, void * */ | ||||
|     unsigned int struct_star:1; /* external, struct foo * */ | ||||
|     unsigned int heim_object:1; /* external, heim_object_t */ | ||||
| }; | ||||
| int decorate_type(const char *, struct decoration *, ssize_t *); | ||||
|  | ||||
|   | ||||
| @@ -1125,10 +1125,7 @@ template_members(struct templatehead *temp, | ||||
|  | ||||
|             poffset2 = partial_offset(basetype, deco.field_name, 1, isstruct); | ||||
|  | ||||
|             if (deco.ext && deco.heim_object) { | ||||
|                 add_line_string(temp, "0", poffset2, | ||||
|                                 "A1_OP_TYPE_DECORATE_EXTERN |A1_FLAG_HEIM_OBJ"); | ||||
|             } else if (deco.ext) { | ||||
|             if (deco.ext) { | ||||
|                 char *ptr = NULL; | ||||
|  | ||||
|                 /* Decorated with external C type */ | ||||
| @@ -1206,10 +1203,7 @@ template_members(struct templatehead *temp, | ||||
|  | ||||
|             poffset2 = partial_offset(basetype, deco.field_name, 1, isstruct); | ||||
|  | ||||
|             if (deco.ext && deco.heim_object) { | ||||
|                 add_line_string(temp, "0", poffset2, | ||||
|                                 "A1_OP_TYPE_DECORATE_EXTERN |A1_FLAG_HEIM_OBJ"); | ||||
|             } else if (deco.ext) { | ||||
|             if (deco.ext) { | ||||
|                 char *ptr = NULL; | ||||
|  | ||||
|                 /* Decorated with external C type */ | ||||
| @@ -1411,10 +1405,7 @@ template_members(struct templatehead *temp, | ||||
|  | ||||
|             poffset2 = partial_offset(basetype, deco.field_name, 1, isstruct); | ||||
|  | ||||
|             if (deco.ext && deco.heim_object) { | ||||
|                 add_line_string(temp, "0", poffset2, | ||||
|                                 "A1_OP_TYPE_DECORATE_EXTERN |A1_FLAG_HEIM_OBJ"); | ||||
|             } else if (deco.ext) { | ||||
|             if (deco.ext) { | ||||
|                 char *ptr = NULL; | ||||
|  | ||||
|                 /* Decorated with external C type */ | ||||
| @@ -1582,26 +1573,23 @@ generate_template(const Symbol *s) | ||||
|     while (decorate_type(s->gen_name, &deco, &more_deco)) { | ||||
|         if (!deco.ext) | ||||
|             continue; | ||||
|         if (deco.heim_object) | ||||
|             fprintf(f, "#include <heimbase.h>\n"); | ||||
|         else if (deco.void_star && deco.header_name) | ||||
|         if (deco.void_star && deco.header_name) | ||||
| 	    fprintf(f, "#include %s\n", deco.header_name); | ||||
|         if (!deco.heim_object) | ||||
|             fprintf(f, | ||||
|                     "static const struct asn1_type_func asn1_extern_%s_%s = {\n" | ||||
|                     "\t(asn1_type_encode)0,\n" | ||||
|                     "\t(asn1_type_decode)0,\n" | ||||
|                     "\t(asn1_type_length)0,\n" | ||||
|                     "\t(asn1_type_copy)%s,\n" | ||||
|                     "\t(asn1_type_release)%s,\n" | ||||
|                     "\t(asn1_type_print)0,\n" | ||||
|                     "\tsizeof(%s)\n" | ||||
|                     "};\n", s->gen_name, deco.field_name, | ||||
|                     deco.copy_function_name && deco.copy_function_name[0] ? | ||||
|                         deco.copy_function_name : "0", | ||||
|                     deco.free_function_name && deco.free_function_name[0] ? | ||||
|                         deco.free_function_name : "0", | ||||
|                     deco.void_star ? "void *" : deco.field_type); | ||||
|         fprintf(f, | ||||
|                 "static const struct asn1_type_func asn1_extern_%s_%s = {\n" | ||||
|                 "\t(asn1_type_encode)0,\n" | ||||
|                 "\t(asn1_type_decode)0,\n" | ||||
|                 "\t(asn1_type_length)0,\n" | ||||
|                 "\t(asn1_type_copy)%s,\n" | ||||
|                 "\t(asn1_type_release)%s,\n" | ||||
|                 "\t(asn1_type_print)0,\n" | ||||
|                 "\tsizeof(%s)\n" | ||||
|                 "};\n", s->gen_name, deco.field_name, | ||||
|                 deco.copy_function_name && deco.copy_function_name[0] ? | ||||
|                 deco.copy_function_name : "0", | ||||
|                 deco.free_function_name && deco.free_function_name[0] ? | ||||
|                 deco.free_function_name : "0", | ||||
|                 deco.void_star ? "void *" : deco.field_type); | ||||
|         free(deco.field_type); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -189,7 +189,7 @@ decorate_type(const char *p, struct decoration *deco, ssize_t *more) | ||||
|  | ||||
|     deco->decorated = 1; | ||||
|     deco->opt = deco->ext = deco->ptr = 0; | ||||
|     deco->void_star = deco->struct_star = deco->heim_object = 0; | ||||
|     deco->void_star = deco->struct_star = 0; | ||||
|     deco->field_name = deco->copy_function_name = deco->free_function_name = | ||||
|         deco->header_name = NULL; | ||||
|  | ||||
| @@ -216,9 +216,6 @@ decorate_type(const char *p, struct decoration *deco, ssize_t *more) | ||||
|         deco->ext = deco->ptr = deco->void_star = 1; | ||||
|         deco->opt = 1; | ||||
|         deco->header_name = NULL; | ||||
|     } else if (strcmp(deco->field_type, "heim_object_t") == 0) { | ||||
|         deco->ptr = deco->heim_object = 1; | ||||
|         deco->header_name = "<heimbase.h>"; | ||||
|     } else if (strncmp(deco->field_type, "struct ", sizeof("struct ") - 1) == 0 && | ||||
|              deco->field_type[strlen(deco->field_type) - 1] == '*') | ||||
|         deco->ptr = deco->struct_star = 1; | ||||
|   | ||||
| @@ -2283,10 +2283,7 @@ _asn1_free(const struct asn1_template *t, void *data) | ||||
|                 /* A1_OP_TYPE_DECORATE_EXTERN */ | ||||
| 		const struct asn1_type_func *f = t->ptr; | ||||
|  | ||||
|                 if (t->tt & A1_FLAG_HEIM_OBJ) { | ||||
|                     heim_release(*(void **)el); | ||||
|                     *(void **)el = 0; | ||||
|                 } else if (f && f->release) | ||||
|                 if (f && f->release) | ||||
|                     (f->release)(el); | ||||
|                 else if (f) | ||||
|                     memset(el, 0, f->size); | ||||
| @@ -2920,9 +2917,7 @@ _asn1_copy(const struct asn1_template *t, const void *from, void *to) | ||||
| 		const struct asn1_type_func *f = t->ptr; | ||||
|  | ||||
|                 /* A1_OP_TYPE_DECORATE_EXTERN */ | ||||
|                 if (t->tt & A1_FLAG_HEIM_OBJ) | ||||
|                     *(heim_object_t *)tel = heim_retain(*(void **)fel); | ||||
|                 else if (f && f->copy) | ||||
|                 if (f && f->copy) | ||||
|                     ret = (f->copy)(fel, tel); | ||||
|                 else if (f) | ||||
|                     memset(tel, 0, f->size); | ||||
|   | ||||
| @@ -2,8 +2,6 @@ | ||||
| --decorate=TESTDecorated:TESTuint32:version2? | ||||
| --decorate=TESTDecorated:my_vers:version3:my_copy_vers:my_free_vers:"check-gen.h" | ||||
| --decorate=TESTDecorated:void *:privthing | ||||
| --decorate=TESTDecorated:heim_object_t:privobj | ||||
| --decorate=TESTDecoratedChoice:TESTuint32:version2? | ||||
| --decorate=TESTDecoratedChoice:my_vers:version3:my_copy_vers:my_free_vers:"check-gen.h" | ||||
| --decorate=TESTDecoratedChoice:void *:privthing | ||||
| --decorate=TESTDecoratedChoice:heim_object_t:privobj | ||||
|   | ||||
		Reference in New Issue
	
	Block a user