Generate one file for each type.

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@1415 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1997-03-14 03:38:55 +00:00
parent a6c0fa274f
commit e9f1ab5210

View File

@@ -6,7 +6,7 @@
#include "der.h"
#include "gen.h"
FILE *headerfile, *codefile;
FILE *headerfile, *codefile, *logfile;
#define STEM "asn1"
@@ -18,23 +18,14 @@ init_generate (char *filename)
"/* Generated from %s */\n"
"/* Do not edit */\n\n",
filename);
codefile = fopen (STEM ".c", "w");
fprintf (codefile,
"/* Generated from %s */\n"
"/* Do not edit */\n\n"
"#include <stdio.h>\n"
"#include <stdlib.h>\n"
"#include <time.h>\n"
"#include <der.h>\n"
"#include <" STEM ".h>\n\n",
filename);
logfile = fopen(STEM "_files", "w");
}
void
close_generate ()
{
fclose (headerfile);
fclose (codefile);
fclose (logfile);
}
void
@@ -697,9 +688,13 @@ free_type (char *name, Type *t)
char *s = malloc(2 + strlen(name) + 1 + strlen(m->gen_name) + 3);
sprintf (s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name);
if(m->optional)
fprintf(codefile, "if(%s) {\n", s);
free_type (s, m->type);
if(m->optional)
fprintf(codefile, "if(%s) free(%s);\n", s, s);
fprintf(codefile,
"free(%s);\n"
"}\n",s);
if (tag == -1)
tag = m->val;
free (s);
@@ -867,9 +862,24 @@ generate_type_length (Symbol *s)
void
generate_type (Symbol *s)
{
generate_type_header (s);
generate_type_encode (s);
generate_type_decode (s);
generate_type_free (s);
generate_type_length (s);
char *filename = malloc(strlen(STEM) + strlen(s->gen_name) + 4);
sprintf(filename, "%s_%s.c", STEM, s->gen_name);
codefile = fopen (filename, "w");
fprintf(logfile, "%s ", filename);
free(filename);
fprintf (codefile,
"/* Generated from %s */\n"
"/* Do not edit */\n\n"
"#include <stdio.h>\n"
"#include <stdlib.h>\n"
"#include <time.h>\n"
"#include <der.h>\n"
"#include <" STEM ".h>\n\n",
filename);
generate_type_header (s);
generate_type_encode (s);
generate_type_decode (s);
generate_type_free (s);
generate_type_length (s);
fclose(codefile);
}