summaryrefslogtreecommitdiff
path: root/source4/heimdal/lib/asn1/gen_template.c
diff options
context:
space:
mode:
authorMatthieu Patou <mat@matws.net>2010-08-15 18:31:28 +0400
committerAndrew Bartlett <abartlet@samba.org>2010-10-03 01:15:04 +0000
commitab6e3fce040f9ad27cbce44e9038a24f15b601c8 (patch)
treeab99a431c9610927b5d0d26335d2712b509fd6dc /source4/heimdal/lib/asn1/gen_template.c
parent197a1514d62494cc8b862d169c841a26e04b8925 (diff)
downloadsamba-ab6e3fce040f9ad27cbce44e9038a24f15b601c8.tar.gz
samba-ab6e3fce040f9ad27cbce44e9038a24f15b601c8.tar.bz2
samba-ab6e3fce040f9ad27cbce44e9038a24f15b601c8.zip
s4:heimdal: import lorikeet-heimdal-201009250123 (commit 42cabfb5b683dbcb97d583c397b897507689e382)
I based this on Matthieu's import of lorikeet-heimdal, and then updated it to this commit. Andrew Bartlett
Diffstat (limited to 'source4/heimdal/lib/asn1/gen_template.c')
-rw-r--r--source4/heimdal/lib/asn1/gen_template.c88
1 files changed, 55 insertions, 33 deletions
diff --git a/source4/heimdal/lib/asn1/gen_template.c b/source4/heimdal/lib/asn1/gen_template.c
index 8d4d9b49c2..9e09eb2d8d 100644
--- a/source4/heimdal/lib/asn1/gen_template.c
+++ b/source4/heimdal/lib/asn1/gen_template.c
@@ -224,7 +224,8 @@ partial_offset(const char *basetype, const char *name, int need_offset)
char *str;
if (name == NULL || need_offset == 0)
return strdup("0");
- asprintf(&str, "offsetof(struct %s, %s)", basetype, name);
+ if (asprintf(&str, "offsetof(struct %s, %s)", basetype, name) < 0 || str == NULL)
+ errx(1, "malloc");
return str;
}
@@ -273,7 +274,8 @@ tlist_header(struct tlist *t, const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
- vasprintf(&t->header, fmt, ap);
+ if (vasprintf(&t->header, fmt, ap) < 0 || t->header == NULL)
+ errx(1, "malloc");
va_end(ap);
}
@@ -389,7 +391,8 @@ add_line(struct templatehead *t, const char *fmt, ...)
struct template *q = calloc(1, sizeof(*q));
va_list ap;
va_start(ap, fmt);
- vasprintf(&q->line, fmt, ap);
+ if (vasprintf(&q->line, fmt, ap) < 0 || q->line == NULL)
+ errx(1, "malloc");
va_end(ap);
ASN1_TAILQ_INSERT_TAIL(t, q, members);
return q;
@@ -404,10 +407,11 @@ add_line_pointer(struct templatehead *t,
{
struct template *q;
va_list ap;
- char *tt;
+ char *tt = NULL;
va_start(ap, ttfmt);
- vasprintf(&tt, ttfmt, ap);
+ if (vasprintf(&tt, ttfmt, ap) < 0 || tt == NULL)
+ errx(1, "malloc");
va_end(ap);
q = add_line(t, "{ %s, %s, asn1_%s }", tt, offset, ptr);
@@ -543,7 +547,7 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
struct template *q;
Member *m;
size_t count = 0, i;
- char *bname;
+ char *bname = NULL;
FILE *f = get_code_file();
if (ASN1_TAILQ_EMPTY(t->members)) {
@@ -551,7 +555,8 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
break;
}
- asprintf(&bname, "bmember_%s_%lu", name ? name : "", (unsigned long)t);
+ if (asprintf(&bname, "bmember_%s_%lu", name ? name : "", (unsigned long)t) < 0 || bname == NULL)
+ errx(1, "malloc");
output_name(bname);
ASN1_TAILQ_FOREACH(m, t->members, members) {
@@ -583,15 +588,18 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
Member *m;
ASN1_TAILQ_FOREACH(m, t->members, members) {
- char *newbasename;
-
+ char *newbasename = NULL;
+
if (m->ellipsis)
continue;
- if (name)
- asprintf(&newbasename, "%s_%s", basetype, name);
- else
+ if (name) {
+ if (asprintf(&newbasename, "%s_%s", basetype, name) < 0)
+ errx(1, "malloc");
+ } else
newbasename = strdup(basetype);
+ if (newbasename == NULL)
+ errx(1, "malloc");
template_members(temp, newbasename, m->gen_name, m->type, m->optional, isstruct, 1);
@@ -601,7 +609,7 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
break;
}
case TTag: {
- char *tname, *elname;
+ char *tname = NULL, *elname = NULL;
const char *sename, *dupname;
int subtype_is_struct = is_struct(t->subtype, isstruct);
@@ -610,10 +618,12 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
else
sename = symbol_name(basetype, t->subtype);
- asprintf(&tname, "tag_%s_%lu", name ? name : "", (unsigned long)t);
+ if (asprintf(&tname, "tag_%s_%lu", name ? name : "", (unsigned long)t) < 0 || tname == NULL)
+ errx(1, "malloc");
output_name(tname);
- asprintf(&elname, "%s_%s", basetype, tname);
+ if (asprintf(&elname, "%s_%s", basetype, tname) < 0 || elname == NULL)
+ errx(1, "malloc");
generate_template_type(elname, &dupname, NULL, sename, name,
t->subtype, 0, subtype_is_struct, 0);
@@ -633,16 +643,17 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
case TSetOf:
case TSequenceOf: {
const char *type, *tname, *dupname;
- char *sename, *elname;
+ char *sename = NULL, *elname = NULL;
int subtype_is_struct = is_struct(t->subtype, 0);
if (name && subtype_is_struct) {
tname = "seofTstruct";
- asprintf(&sename, "%s_%s_val",
- basetype, name);
+ if (asprintf(&sename, "%s_%s_val", basetype, name) < 0)
+ errx(1, "malloc");
} else if (subtype_is_struct) {
tname = "seofTstruct";
- asprintf(&sename, "%s_val", symbol_name(basetype, t->subtype));
+ if (asprintf(&sename, "%s_val", symbol_name(basetype, t->subtype)) < 0)
+ errx(1, "malloc");
} else {
if (name)
tname = name;
@@ -650,12 +661,15 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
tname = "seofTstruct";
sename = strdup(symbol_name(basetype, t->subtype));
}
+ if (sename == NULL)
+ errx(1, "malloc");
if (t->type == TSetOf) type = "A1_OP_SETOF";
else if (t->type == TSequenceOf) type = "A1_OP_SEQOF";
else abort();
- asprintf(&elname, "%s_%s_%lu", basetype, tname, (unsigned long)t);
+ if (asprintf(&elname, "%s_%s_%lu", basetype, tname, (unsigned long)t) < 0 || elname == NULL)
+ errx(1, "malloc");
generate_template_type(elname, &dupname, NULL, sename, NULL, t->subtype,
0, subtype_is_struct, need_offset);
@@ -668,21 +682,22 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
struct templatehead template = ASN1_TAILQ_HEAD_INITIALIZER(template);
struct template *q;
size_t count = 0, i;
- char *tname;
+ char *tname = NULL;
FILE *f = get_code_file();
Member *m;
int ellipsis = 0;
char *e;
- asprintf(&tname, "asn1_choice_%s_%s%x",
- basetype, name ? name : "", (unsigned int)(uintptr_t)t);
+ if (asprintf(&tname, "asn1_choice_%s_%s%x",
+ basetype, name ? name : "", (unsigned int)(uintptr_t)t) < 0 || tname == NULL)
+ errx(1, "malloc");
ASN1_TAILQ_FOREACH(m, t->members, members) {
const char *dupname;
- char *elname;
- char *newbasename;
+ char *elname = NULL;
+ char *newbasename = NULL;
int subtype_is_struct;
-
+
if (m->ellipsis) {
ellipsis = 1;
continue;
@@ -690,13 +705,19 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
subtype_is_struct = is_struct(m->type, 0);
- asprintf(&elname, "%s_choice_%s", basetype, m->gen_name);
+ if (asprintf(&elname, "%s_choice_%s", basetype, m->gen_name) < 0 || elname == NULL)
+ errx(1, "malloc");
- if (subtype_is_struct)
- asprintf(&newbasename, "%s_%s", basetype, m->gen_name);
- else
+ if (subtype_is_struct) {
+ if (asprintf(&newbasename, "%s_%s", basetype, m->gen_name) < 0)
+ errx(1, "malloc");
+ } else
newbasename = strdup(basetype);
+ if (newbasename == NULL)
+ errx(1, "malloc");
+
+
generate_template_type(elname, &dupname, NULL,
symbol_name(newbasename, m->type),
NULL, m->type, 0, subtype_is_struct, 1);
@@ -710,10 +731,11 @@ template_members(struct templatehead *temp, const char *basetype, const char *na
free(newbasename);
}
+ e = NULL;
if (ellipsis) {
- asprintf(&e, "offsetof(%s%s, u.asn1_ellipsis)", isstruct ? "struct " : "", basetype);
- } else
- e = NULL;
+ if (asprintf(&e, "offsetof(%s%s, u.asn1_ellipsis)", isstruct ? "struct " : "", basetype) < 0 || e == NULL)
+ errx(1, "malloc");
+ }
ASN1_TAILQ_FOREACH(q, &template, members) {
count++;