diff options
author | Matthieu Patou <mat@matws.net> | 2010-08-15 18:31:28 +0400 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2010-10-03 01:15:04 +0000 |
commit | ab6e3fce040f9ad27cbce44e9038a24f15b601c8 (patch) | |
tree | ab99a431c9610927b5d0d26335d2712b509fd6dc /source4/heimdal/lib/asn1/gen_template.c | |
parent | 197a1514d62494cc8b862d169c841a26e04b8925 (diff) | |
download | samba-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.c | 88 |
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++; |