Lines Matching +full:n +full:- +full:1

2  * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan
12 * 1. Redistributions of source code must retain the above copyright
64 tmp->module = module; in add_import()
65 tmp->next = imports; in add_import()
68 fprintf (headerfile, "#include <%s_asn1.h>\n", module); in add_import()
88 tmp->name = name; in add_export()
89 tmp->next = exports; in add_export()
99 return 1; in is_export()
101 for (tmp = exports; tmp != NULL; tmp = tmp->next) { in is_export()
102 if (strcmp(tmp->name, name) == 0) { in is_export()
103 tmp->defined = 1; in is_export()
104 return 1; in is_export()
125 errx(1, "strdup"); in init_generate()
130 errx(1, "malloc"); in init_generate()
132 errx(1, "malloc"); in init_generate()
135 err (1, "open %s", fn); in init_generate()
140 if (asprintf(&privheader, "%s-priv.h", headerbase) < 0 || privheader == NULL) in init_generate()
141 errx(1, "malloc"); in init_generate()
142 if (asprintf(&fn, "%s-priv.hx", headerbase) < 0 || fn == NULL) in init_generate()
143 errx(1, "malloc"); in init_generate()
146 err (1, "open %s", fn); in init_generate()
151 if (asprintf(&template, "%s-template.c", headerbase) < 0 || template == NULL) in init_generate()
152 errx(1, "malloc"); in init_generate()
154 "/* Generated from %s */\n" in init_generate()
155 "/* Do not edit */\n\n", in init_generate()
158 "#ifndef __%s_h__\n" in init_generate()
159 "#define __%s_h__\n\n", headerbase, headerbase); in init_generate()
161 "#include <stddef.h>\n" in init_generate()
162 "#include <time.h>\n\n"); in init_generate()
164 "#ifndef __asn1_common_definitions__\n" in init_generate()
165 "#define __asn1_common_definitions__\n\n"); in init_generate()
167 "typedef struct heim_integer {\n" in init_generate()
168 " size_t length;\n" in init_generate()
169 " void *data;\n" in init_generate()
170 " int negative;\n" in init_generate()
171 "} heim_integer;\n\n"); in init_generate()
173 "typedef struct heim_octet_string {\n" in init_generate()
174 " size_t length;\n" in init_generate()
175 " void *data;\n" in init_generate()
176 "} heim_octet_string;\n\n"); in init_generate()
178 "typedef char *heim_general_string;\n\n" in init_generate()
181 "typedef char *heim_utf8_string;\n\n" in init_generate()
184 "typedef struct heim_octet_string heim_printable_string;\n\n" in init_generate()
187 "typedef struct heim_octet_string heim_ia5_string;\n\n" in init_generate()
190 "typedef struct heim_bmp_string {\n" in init_generate()
191 " size_t length;\n" in init_generate()
192 " uint16_t *data;\n" in init_generate()
193 "} heim_bmp_string;\n\n"); in init_generate()
195 "typedef struct heim_universal_string {\n" in init_generate()
196 " size_t length;\n" in init_generate()
197 " uint32_t *data;\n" in init_generate()
198 "} heim_universal_string;\n\n"); in init_generate()
200 "typedef char *heim_visible_string;\n\n" in init_generate()
203 "typedef struct heim_oid {\n" in init_generate()
204 " size_t length;\n" in init_generate()
205 " unsigned *components;\n" in init_generate()
206 "} heim_oid;\n\n"); in init_generate()
208 "typedef struct heim_bit_string {\n" in init_generate()
209 " size_t length;\n" in init_generate()
210 " void *data;\n" in init_generate()
211 "} heim_bit_string;\n\n"); in init_generate()
213 "typedef struct heim_octet_string heim_any;\n" in init_generate()
214 "typedef struct heim_octet_string heim_any_set;\n\n"); in init_generate()
215 fputs("#define ASN1_MALLOC_ENCODE(T, B, BL, S, L, R) \\\n" in init_generate()
216 " do { \\\n" in init_generate()
217 " (BL) = length_##T((S)); \\\n" in init_generate()
218 " (B) = malloc((BL)); \\\n" in init_generate()
219 " if((B) == NULL) { \\\n" in init_generate()
220 " (R) = ENOMEM; \\\n" in init_generate()
221 " } else { \\\n" in init_generate()
222 " (R) = encode_##T(((unsigned char*)(B)) + (BL) - 1, (BL), \\\n" in init_generate()
223 " (S), (L)); \\\n" in init_generate()
224 " if((R) != 0) { \\\n" in init_generate()
225 " free((B)); \\\n" in init_generate()
226 " (B) = NULL; \\\n" in init_generate()
227 " } \\\n" in init_generate()
228 " } \\\n" in init_generate()
229 " } while (0)\n\n", in init_generate()
231 fputs("#ifdef _WIN32\n" in init_generate()
232 "#ifndef ASN1_LIB\n" in init_generate()
233 "#define ASN1EXP __declspec(dllimport)\n" in init_generate()
234 "#else\n" in init_generate()
235 "#define ASN1EXP\n" in init_generate()
236 "#endif\n" in init_generate()
237 "#define ASN1CALL __stdcall\n" in init_generate()
238 "#else\n" in init_generate()
239 "#define ASN1EXP\n" in init_generate()
240 "#define ASN1CALL\n" in init_generate()
241 "#endif\n", in init_generate()
243 fprintf (headerfile, "struct units;\n\n"); in init_generate()
244 fprintf (headerfile, "#endif\n\n"); in init_generate()
246 errx(1, "malloc"); in init_generate()
249 err (1, "open %s", fn); in init_generate()
257 err (1, "open %s", template); in init_generate()
260 "/* Generated from %s */\n" in init_generate()
261 "/* Do not edit */\n\n" in init_generate()
262 "#include <stdio.h>\n" in init_generate()
263 "#include <stdlib.h>\n" in init_generate()
264 "#include <time.h>\n" in init_generate()
265 "#include <string.h>\n" in init_generate()
266 "#include <errno.h>\n" in init_generate()
267 "#include <limits.h>\n" in init_generate()
268 "#include <krb5-types.h>\n", in init_generate()
272 "#include <%s>\n" in init_generate()
273 "#include <%s>\n" in init_generate()
274 "#include <der.h>\n" in init_generate()
275 "#include <der-private.h>\n" in init_generate()
276 "#include <asn1-template.h>\n", in init_generate()
285 fprintf (headerfile, "#endif /* __%s_h__ */\n", headerbase); in close_generate()
294 fprintf (logfile, "\n"); in close_generate()
301 switch(val->type) { in gen_assign_defval()
303 fprintf(codefile, "if((%s = strdup(\"%s\")) == NULL)\nreturn ENOMEM;\n", var, val->u.stringvalue); in gen_assign_defval()
306 fprintf(codefile, "%s = %" PRId64 ";\n", var, val->u.integervalue); in gen_assign_defval()
309 if(val->u.booleanvalue) in gen_assign_defval()
310 fprintf(codefile, "%s = TRUE;\n", var); in gen_assign_defval()
312 fprintf(codefile, "%s = FALSE;\n", var); in gen_assign_defval()
322 switch(val->type) { in gen_compare_defval()
324 fprintf(codefile, "if(strcmp(%s, \"%s\") != 0)\n", var, val->u.stringvalue); in gen_compare_defval()
327 fprintf(codefile, "if(%s != %" PRId64 ")\n", var, val->u.integervalue); in gen_compare_defval()
330 if(val->u.booleanvalue) in gen_compare_defval()
331 fprintf(codefile, "if(!%s)\n", var); in gen_compare_defval()
333 fprintf(codefile, "if(%s)\n", var); in gen_compare_defval()
349 errx(1, "malloc"); in generate_header_of_codefile()
352 err (1, "fopen %s", filename); in generate_header_of_codefile()
357 "/* Generated from %s */\n" in generate_header_of_codefile()
358 "/* Do not edit */\n\n" in generate_header_of_codefile()
359 "#define ASN1_LIB\n\n" in generate_header_of_codefile()
360 "#include <stdio.h>\n" in generate_header_of_codefile()
361 "#include <stdlib.h>\n" in generate_header_of_codefile()
362 "#include <time.h>\n" in generate_header_of_codefile()
363 "#include <string.h>\n" in generate_header_of_codefile()
364 "#include <errno.h>\n" in generate_header_of_codefile()
365 "#include <limits.h>\n" in generate_header_of_codefile()
366 "#include <krb5-types.h>\n", in generate_header_of_codefile()
370 "#include <%s>\n" in generate_header_of_codefile()
371 "#include <%s>\n", in generate_header_of_codefile()
374 "#include <asn1_err.h>\n" in generate_header_of_codefile()
375 "#include <der.h>\n" in generate_header_of_codefile()
376 "#include <der-private.h>\n" in generate_header_of_codefile()
377 "#include <asn1-template.h>\n" in generate_header_of_codefile()
378 "#include <parse_units.h>\n\n"); in generate_header_of_codefile()
396 switch(s->value->type) { in generate_constant()
400 fprintf (headerfile, "enum { %s = %" PRId64 " };\n\n", in generate_constant()
401 s->gen_name, s->value->u.integervalue); in generate_constant()
413 generate_header_of_codefile(s->gen_name); in generate_constant()
416 for (o = s->value->u.objectidentifiervalue; o != NULL; o = o->next) in generate_constant()
419 printf("s->gen_name: %s",s->gen_name); in generate_constant()
426 for (o = s->value->u.objectidentifiervalue; o != NULL; o = o->next) in generate_constant()
429 fprintf (headerfile, "/* OBJECT IDENTIFIER %s ::= { ", s->name); in generate_constant()
430 for (i = len ; i > 0; i--) { in generate_constant()
431 o = list[i - 1]; in generate_constant()
433 o->label ? o->label : "label-less", o->value); in generate_constant()
437 s->gen_name, len); in generate_constant()
438 for (i = len ; i > 0; i--) { in generate_constant()
439 fprintf(codefile, "%d%s ", list[i - 1]->value, i > 1 ? "," : ""); in generate_constant()
441 fprintf(codefile, "};\n"); in generate_constant()
444 "{ %d, oid_%s_variable_num };\n\n", in generate_constant()
445 s->gen_name, len, s->gen_name); in generate_constant()
451 gen_upper = strdup(s->gen_name); in generate_constant()
454 gen_upper[i] = toupper((int)s->gen_name[i]); in generate_constant()
456 fprintf (headerfile, "} */\n"); in generate_constant()
458 "extern ASN1EXP const heim_oid asn1_oid_%s;\n" in generate_constant()
459 "#define ASN1_OID_%s (&asn1_oid_%s)\n\n", in generate_constant()
460 s->gen_name, in generate_constant()
462 s->gen_name); in generate_constant()
497 return 1; in is_primitive_type()
506 while(level-- > 0) in space()
513 struct member *n = ASN1_TAILQ_NEXT(m, members); in last_member_p() local
514 if (n == NULL) in last_member_p()
516 if (n->ellipsis && ASN1_TAILQ_NEXT(n, members) == NULL) in last_member_p()
525 ASN1_TAILQ_FOREACH(m, t->members, members) { in have_ellipsis()
526 if (m->ellipsis) in have_ellipsis()
535 switch (t->type) { in define_asn1()
537 fprintf (headerfile, "%s", t->symbol->name); in define_asn1()
540 if(t->members == NULL) { in define_asn1()
542 if (t->range) in define_asn1()
544 t->range->min, t->range->max); in define_asn1()
547 fprintf (headerfile, "INTEGER {\n"); in define_asn1()
548 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_asn1()
549 space (level + 1); in define_asn1()
550 fprintf(headerfile, "%s(%d)%s\n", m->gen_name, m->val, in define_asn1()
568 if(t->type == TBitString) in define_asn1()
569 fprintf (headerfile, "BIT STRING {\n"); in define_asn1()
571 fprintf (headerfile, "ENUMERATED {\n"); in define_asn1()
572 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_asn1()
573 space(level + 1); in define_asn1()
574 fprintf (headerfile, "%s(%d)%s\n", m->name, m->val, in define_asn1()
587 if(t->type == TChoice) in define_asn1()
588 fprintf(headerfile, "CHOICE {\n"); in define_asn1()
589 else if(t->type == TSet) in define_asn1()
590 fprintf(headerfile, "SET {\n"); in define_asn1()
592 fprintf(headerfile, "SEQUENCE {\n"); in define_asn1()
593 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_asn1()
594 if(strlen(m->name) > max_width) in define_asn1()
595 max_width = strlen(m->name); in define_asn1()
599 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_asn1()
601 space(level + 1); in define_asn1()
602 if (m->ellipsis) { in define_asn1()
605 width -= fprintf(headerfile, "%s", m->name); in define_asn1()
607 define_asn1(level + 1, m->type); in define_asn1()
608 if(m->optional) in define_asn1()
613 fprintf (headerfile, "\n"); in define_asn1()
621 define_asn1 (0, t->subtype); in define_asn1()
625 define_asn1 (0, t->subtype); in define_asn1()
639 if(t->tag.tagclass != ASN1_C_UNIV) in define_asn1()
641 classnames[t->tag.tagclass], in define_asn1()
642 t->tag.tagvalue); in define_asn1()
643 if(t->tag.tagenv == TE_IMPLICIT) in define_asn1()
645 define_asn1 (level, t->subtype); in define_asn1()
697 errx(1, "malloc"); in getnewbasename()
700 err(1, "malloc"); in getnewbasename()
708 switch (t->type) { in define_type()
711 fprintf (headerfile, "%s %s;\n", t->symbol->gen_name, name); in define_type()
715 if(t->members) { in define_type()
717 fprintf (headerfile, "enum %s {\n", typedefp ? name : ""); in define_type()
718 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_type()
719 space (level + 1); in define_type()
720 fprintf(headerfile, "%s = %d%s\n", m->gen_name, m->val, in define_type()
723 fprintf (headerfile, "} %s;\n", name); in define_type()
724 } else if (t->range == NULL) { in define_type()
725 fprintf (headerfile, "heim_integer %s;\n", name); in define_type()
726 } else if (t->range->min < INT_MIN && t->range->max <= INT64_MAX) { in define_type()
727 fprintf (headerfile, "int64_t %s;\n", name); in define_type()
728 } else if (t->range->min >= 0 && t->range->max > UINT_MAX) { in define_type()
729 fprintf (headerfile, "uint64_t %s;\n", name); in define_type()
730 } else if (t->range->min >= 0 && t->range->max <= UINT_MAX) { in define_type()
731 fprintf (headerfile, "unsigned int %s;\n", name); in define_type()
732 } else if (t->range->min >= INT_MIN && t->range->max <= INT_MAX) { in define_type()
733 fprintf (headerfile, "int %s;\n", name); in define_type()
735 errx(1, "%s: unsupported range %" PRId64 " -> %" PRId64 "", in define_type()
736 name, t->range->min, t->range->max); in define_type()
740 fprintf (headerfile, "int %s;\n", name); in define_type()
744 fprintf (headerfile, "heim_octet_string %s;\n", name); in define_type()
757 if(ASN1_TAILQ_EMPTY(t->members)) in define_type()
758 fprintf (headerfile, "heim_bit_string %s;\n", name); in define_type()
763 fprintf (headerfile, "struct %s {\n", newbasename); in define_type()
764 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_type()
765 char *n = NULL; in define_type() local
768 while (pos < m->val) { in define_type()
769 if (asprintf (&n, "_unused%d:1", pos) < 0 || n == NULL) in define_type()
770 errx(1, "malloc"); in define_type()
771 define_type (level + 1, n, newbasename, &i, FALSE, FALSE); in define_type()
772 free(n); in define_type()
776 n = NULL; in define_type()
777 if (asprintf (&n, "%s:1", m->gen_name) < 0 || n == NULL) in define_type()
778 errx(1, "malloc"); in define_type()
779 define_type (level + 1, n, newbasename, &i, FALSE, FALSE); in define_type()
780 free (n); in define_type()
781 n = NULL; in define_type()
786 char *n = NULL; in define_type() local
787 if (asprintf (&n, "_unused%d:1", pos) < 0 || n == NULL) in define_type()
788 errx(1, "malloc"); in define_type()
789 define_type (level + 1, n, newbasename, &i, FALSE, FALSE); in define_type()
790 free(n); in define_type()
795 fprintf (headerfile, "} %s;\n\n", name); in define_type()
803 fprintf (headerfile, "enum %s {\n", typedefp ? name : ""); in define_type()
804 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_type()
805 space(level + 1); in define_type()
806 if (m->ellipsis) in define_type()
807 fprintf (headerfile, "/* ... */\n"); in define_type()
809 fprintf (headerfile, "%s = %d%s\n", m->gen_name, m->val, in define_type()
813 fprintf (headerfile, "} %s;\n\n", name); in define_type()
823 fprintf (headerfile, "struct %s {\n", newbasename); in define_type()
824 if (t->type == TSequence && preservep) { in define_type()
825 space(level + 1); in define_type()
826 fprintf(headerfile, "heim_octet_string _save;\n"); in define_type()
828 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_type()
829 if (m->ellipsis) { in define_type()
831 } else if (m->optional) { in define_type()
832 char *n = NULL; in define_type() local
834 if (asprintf (&n, "*%s", m->gen_name) < 0 || n == NULL) in define_type()
835 errx(1, "malloc"); in define_type()
836 define_type (level + 1, n, newbasename, m->type, FALSE, FALSE); in define_type()
837 free (n); in define_type()
839 define_type (level + 1, m->gen_name, newbasename, m->type, FALSE, FALSE); in define_type()
842 fprintf (headerfile, "} %s;\n", name); in define_type()
858 fprintf (headerfile, "struct %s {\n", newbasename); in define_type()
859 define_type (level + 1, "len", newbasename, &i, FALSE, FALSE); in define_type()
860 define_type (level + 1, "*val", newbasename, t->subtype, FALSE, FALSE); in define_type()
862 fprintf (headerfile, "} %s;\n", name); in define_type()
867 fprintf (headerfile, "time_t %s;\n", name); in define_type()
871 fprintf (headerfile, "heim_general_string %s;\n", name); in define_type()
875 fprintf (headerfile, "heim_general_string %s;\n", name); in define_type()
878 define_type (level, name, basename, t->subtype, typedefp, preservep); in define_type()
881 int first = 1; in define_type()
887 fprintf (headerfile, "struct %s {\n", newbasename); in define_type()
889 space(level + 1); in define_type()
890 fprintf(headerfile, "heim_octet_string _save;\n"); in define_type()
892 space(level + 1); in define_type()
893 fprintf (headerfile, "enum {\n"); in define_type()
897 fprintf (headerfile, "%s = 0,\n", m->label); in define_type()
900 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_type()
902 if (m->ellipsis) in define_type()
903 fprintf (headerfile, "/* ... */\n"); in define_type()
905 fprintf (headerfile, "%s%s%s\n", m->label, in define_type()
906 first ? " = 1" : "", in define_type()
910 space(level + 1); in define_type()
911 fprintf (headerfile, "} element;\n"); in define_type()
912 space(level + 1); in define_type()
913 fprintf (headerfile, "union {\n"); in define_type()
914 ASN1_TAILQ_FOREACH(m, t->members, members) { in define_type()
915 if (m->ellipsis) { in define_type()
917 fprintf(headerfile, "heim_octet_string asn1_ellipsis;\n"); in define_type()
918 } else if (m->optional) { in define_type()
919 char *n = NULL; in define_type() local
921 if (asprintf (&n, "*%s", m->gen_name) < 0 || n == NULL) in define_type()
922 errx(1, "malloc"); in define_type()
923 define_type (level + 2, n, newbasename, m->type, FALSE, FALSE); in define_type()
924 free (n); in define_type()
926 define_type (level + 2, m->gen_name, newbasename, m->type, FALSE, FALSE); in define_type()
928 space(level + 1); in define_type()
929 fprintf (headerfile, "} u;\n"); in define_type()
931 fprintf (headerfile, "} %s;\n", name); in define_type()
936 fprintf (headerfile, "time_t %s;\n", name); in define_type()
940 fprintf (headerfile, "heim_utf8_string %s;\n", name); in define_type()
944 fprintf (headerfile, "heim_printable_string %s;\n", name); in define_type()
948 fprintf (headerfile, "heim_ia5_string %s;\n", name); in define_type()
952 fprintf (headerfile, "heim_bmp_string %s;\n", name); in define_type()
956 fprintf (headerfile, "heim_universal_string %s;\n", name); in define_type()
960 fprintf (headerfile, "heim_visible_string %s;\n", name); in define_type()
964 fprintf (headerfile, "heim_oid %s;\n", name); in define_type()
968 fprintf (headerfile, "int %s;\n", name); in define_type()
980 int preservep = preserve_type(s->name) ? TRUE : FALSE; in generate_type_header()
982 fprintf (headerfile, "/*\n"); in generate_type_header()
983 fprintf (headerfile, "%s ::= ", s->name); in generate_type_header()
984 define_asn1 (0, s->type); in generate_type_header()
985 fprintf (headerfile, "\n*/\n\n"); in generate_type_header()
988 define_type (0, s->gen_name, s->gen_name, s->type, TRUE, preservep); in generate_type_header()
990 fprintf (headerfile, "\n"); in generate_type_header()
1000 generate_header_of_codefile(s->gen_name); in generate_type()
1015 generate_glue (s->type, s->gen_name); in generate_type()
1019 if (is_export(s->name)) { in generate_type()
1029 "decode_%s(const unsigned char *, size_t, %s *, size_t *);\n", in generate_type()
1031 s->gen_name, s->gen_name); in generate_type()
1034 "encode_%s(unsigned char *, size_t, const %s *, size_t *);\n", in generate_type()
1036 s->gen_name, s->gen_name); in generate_type()
1038 "%ssize_t ASN1CALL length_%s(const %s *);\n", in generate_type()
1040 s->gen_name, s->gen_name); in generate_type()
1042 "%sint ASN1CALL copy_%s (const %s *, %s *);\n", in generate_type()
1044 s->gen_name, s->gen_name, s->gen_name); in generate_type()
1046 "%svoid ASN1CALL free_%s (%s *);\n", in generate_type()
1048 s->gen_name, s->gen_name); in generate_type()
1050 fprintf(h, "\n\n"); in generate_type()
1053 fprintf(codefile, "\n\n"); in generate_type()