asn1: Revert heim_object_t support

This commit is contained in:
Nicolas Williams
2022-01-28 11:29:30 -06:00
committed by Nico Williams
parent 327ec7e75c
commit 4748f3a19d
13 changed files with 28 additions and 101 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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] == '"' ? "" : "\"",

View File

@@ -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);

View File

@@ -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);

View File

@@ -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 *);

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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);

View File

@@ -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