asn1: Teach template compiler about units
This commit is contained in:
@@ -51,7 +51,7 @@ gen_files_pkcs10 = asn1_pkcs10_asn1.x
|
||||
gen_files_pkcs12 = asn1_pkcs12_asn1.x
|
||||
gen_files_pkcs8 = asn1_pkcs8_asn1.x
|
||||
gen_files_pkcs9 = asn1_pkcs9_asn1.x
|
||||
gen_files_test_template = test_template_asn1-template.x
|
||||
gen_files_test_template = asn1_test_template_asn1.x
|
||||
gen_files_test = asn1_test_asn1.x
|
||||
gen_files_digest = asn1_digest_asn1.x
|
||||
gen_files_kx509 = asn1_kx509_asn1.x
|
||||
@@ -322,7 +322,7 @@ x690sample_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/x690sample.asn1
|
||||
$(ASN1_COMPILE) --one-code-file $(srcdir)/x690sample.asn1 x690sample_asn1 || (rm -f x690sample_asn1_files ; exit 1)
|
||||
|
||||
test_template_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/test.asn1
|
||||
$(ASN1_COMPILE) --template --sequence=TESTSeqOf $(srcdir)/test.asn1 test_template_asn1 || (rm -f test_template_asn1_files ; exit 1)
|
||||
$(ASN1_COMPILE) --one-code-file --template --sequence=TESTSeqOf $(srcdir)/test.asn1 test_template_asn1 || (rm -f test_template_asn1_files ; exit 1)
|
||||
|
||||
test_asn1_files: asn1_compile$(EXEEXT) $(srcdir)/test.asn1
|
||||
$(ASN1_COMPILE) --one-code-file --sequence=TESTSeqOf $(srcdir)/test.asn1 test_asn1 || (rm -f test_asn1_files ; exit 1)
|
||||
|
@@ -63,7 +63,7 @@ gen_files_pkcs10 = $(OBJ)\asn1_pkcs10_asn1.x
|
||||
|
||||
gen_files_test = $(OBJ)\asn1_test_asn1.x
|
||||
|
||||
gen_files_test_template = $(OBJ)\test_template_asn1-template.x
|
||||
gen_files_test_template = $(OBJ)\asn1_test_template_asn1.x
|
||||
|
||||
gen_files_digest = $(OBJ)\asn1_digest_asn1.x
|
||||
|
||||
@@ -339,7 +339,8 @@ $(gen_files_test) $(OBJ)\test_asn1.hx: $(BINDIR)\asn1_compile.exe test.asn1
|
||||
$(gen_files_test_template) $(OBJ)\test_template_asn1.hx: $(BINDIR)\asn1_compile.exe test.asn1
|
||||
cd $(OBJ)
|
||||
$(BINDIR)\asn1_compile.exe \
|
||||
--template --sequence=TESTSeqOf \
|
||||
--one-code-file --template \
|
||||
--sequence=TESTSeqOf \
|
||||
$(SRCDIR)\test.asn1 test_template_asn1 \
|
||||
|| ($(RM) $(OBJ)\test_template_asn1.h ; exit /b 1)
|
||||
cd $(SRCDIR)
|
||||
|
@@ -37,6 +37,14 @@
|
||||
|
||||
RCSID("$Id$");
|
||||
|
||||
static FILE *
|
||||
get_code_file(void)
|
||||
{
|
||||
if (!one_code_file && template_flag && templatefile)
|
||||
return templatefile;
|
||||
return codefile;
|
||||
}
|
||||
|
||||
static void
|
||||
generate_2int (const Type *t, const char *gen_name)
|
||||
{
|
||||
@@ -46,17 +54,17 @@ generate_2int (const Type *t, const char *gen_name)
|
||||
"uint64_t %s2int(%s);\n",
|
||||
gen_name, gen_name);
|
||||
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"uint64_t %s2int(%s f)\n"
|
||||
"{\n"
|
||||
"uint64_t r = 0;\n",
|
||||
gen_name, gen_name);
|
||||
|
||||
HEIM_TAILQ_FOREACH(m, t->members, members) {
|
||||
fprintf (codefile, "if(f.%s) r |= (1ULL << %d);\n",
|
||||
fprintf (get_code_file(), "if(f.%s) r |= (1ULL << %d);\n",
|
||||
m->gen_name, m->val);
|
||||
}
|
||||
fprintf (codefile, "return r;\n"
|
||||
fprintf (get_code_file(), "return r;\n"
|
||||
"}\n\n");
|
||||
}
|
||||
|
||||
@@ -69,7 +77,7 @@ generate_int2 (const Type *t, const char *gen_name)
|
||||
"%s int2%s(uint64_t);\n",
|
||||
gen_name, gen_name);
|
||||
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"%s int2%s(uint64_t n)\n"
|
||||
"{\n"
|
||||
"\t%s flags;\n\n"
|
||||
@@ -78,11 +86,11 @@ generate_int2 (const Type *t, const char *gen_name)
|
||||
|
||||
if(t->members) {
|
||||
HEIM_TAILQ_FOREACH(m, t->members, members) {
|
||||
fprintf (codefile, "\tflags.%s = (n >> %d) & 1;\n",
|
||||
fprintf (get_code_file(), "\tflags.%s = (n >> %d) & 1;\n",
|
||||
m->gen_name, m->val);
|
||||
}
|
||||
}
|
||||
fprintf (codefile, "\treturn flags;\n"
|
||||
fprintf (get_code_file(), "\treturn flags;\n"
|
||||
"}\n\n");
|
||||
}
|
||||
|
||||
@@ -107,27 +115,27 @@ generate_units (const Type *t, const char *gen_name)
|
||||
gen_name);
|
||||
}
|
||||
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"static struct units %s_units[] = {\n",
|
||||
gen_name);
|
||||
|
||||
if(t->members) {
|
||||
HEIM_TAILQ_FOREACH_REVERSE(m, t->members, memhead, members) {
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"\t{\"%s\",\t1ULL << %d},\n", m->name, m->val);
|
||||
}
|
||||
}
|
||||
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"\t{NULL,\t0}\n"
|
||||
"};\n\n");
|
||||
|
||||
if (template_flag)
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"const struct units * asn1_%s_table_units = %s_units;\n",
|
||||
gen_name, gen_name);
|
||||
else
|
||||
fprintf (codefile,
|
||||
fprintf (get_code_file(),
|
||||
"const struct units * asn1_%s_units(void){\n"
|
||||
"return %s_units;\n"
|
||||
"}\n\n",
|
||||
|
Reference in New Issue
Block a user