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