From 5b1f9fc01ca43beee9e4600727a159f0c32fa3ca Mon Sep 17 00:00:00 2001 From: Assar Westerlund Date: Mon, 14 Jul 1997 11:38:28 +0000 Subject: [PATCH] Use `err' and `asprintf' git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@2272 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/asn1/gen_copy.c | 22 ++++++----- lib/asn1/gen_decode.c | 88 +++++++++++++++++++++---------------------- lib/asn1/gen_encode.c | 8 ++-- lib/asn1/gen_free.c | 9 +++-- lib/asn1/gen_length.c | 9 +++-- 5 files changed, 71 insertions(+), 65 deletions(-) diff --git a/lib/asn1/gen_copy.c b/lib/asn1/gen_copy.c index 7ce72884b..3fbd357a5 100644 --- a/lib/asn1/gen_copy.c +++ b/lib/asn1/gen_copy.c @@ -36,11 +36,13 @@ copy_type (char *from, char *to, Type *t) break; for (m = t->members; m && tag != m->val; m = m->next) { - char *f = malloc(2 + strlen(from) + 1 + strlen(m->gen_name) + 3); - char *t = malloc(2 + strlen(to) + 1 + strlen(m->gen_name) + 3); + char *f; + char *t; - sprintf (f, "%s(%s)->%s", m->optional ? "" : "&", from, m->gen_name); - sprintf (t, "%s(%s)->%s", m->optional ? "" : "&", to, m->gen_name); + asprintf (&f, "%s(%s)->%s", + m->optional ? "" : "&", from, m->gen_name); + asprintf (&t, "%s(%s)->%s", + m->optional ? "" : "&", to, m->gen_name); if(m->optional){ fprintf(codefile, "if(%s) {\n", f); fprintf(codefile, "%s = malloc(sizeof(*%s));\n", t, t); @@ -58,15 +60,17 @@ copy_type (char *from, char *to, Type *t) break; } case TSequenceOf: { - char *f = malloc(strlen(from) + strlen(to) + 17); - char *T = malloc(strlen(to) + strlen(to) + 17); + char *f; + char *T; fprintf (codefile, "(%s)->val = " "malloc((%s)->len * sizeof(*(%s)->val));\n", to, from, to); - fprintf(codefile, "for((%s)->len = 0; (%s)->len < (%s)->len; (%s)->len++){\n", to, to, from, to); - sprintf(f, "&(%s)->val[(%s)->len]", from, to); - sprintf(T, "&(%s)->val[(%s)->len]", to, to); + fprintf(codefile, + "for((%s)->len = 0; (%s)->len < (%s)->len; (%s)->len++){\n", + to, to, from, to); + asprintf(&f, "&(%s)->val[(%s)->len]", from, to); + asprintf(&T, "&(%s)->val[(%s)->len]", to, to); copy_type(f, T, t->subtype); fprintf(codefile, "}\n"); free(f); diff --git a/lib/asn1/gen_decode.c b/lib/asn1/gen_decode.c index 471aee10d..fa1fa83bc 100644 --- a/lib/asn1/gen_decode.c +++ b/lib/asn1/gen_decode.c @@ -80,9 +80,9 @@ decode_type (char *name, Type *t) "return ASN1_BAD_FORMAT;\n"); for (m = t->members; m && tag != m->val; m = m->next) { - char *s = malloc(2 + strlen(name) + 1 + strlen(m->gen_name) + 3); + char *s; - sprintf (s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); + asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); if (0 && m->type->type == TType){ if(m->optional) fprintf (codefile, @@ -105,49 +105,49 @@ decode_type (char *name, Type *t) fprintf (codefile, "FORW;\n"); }else{ - fprintf (codefile, "{\n" - "size_t newlen, oldlen;\n\n" - "e = der_match_tag (p, len, CONTEXT, CONS, %d, &l);\n", - m->val); - fprintf (codefile, - "if (e)\n"); - if(m->optional) - /* XXX should look at e */ + fprintf (codefile, "{\n" + "size_t newlen, oldlen;\n\n" + "e = der_match_tag (p, len, CONTEXT, CONS, %d, &l);\n", + m->val); fprintf (codefile, - "%s = NULL;\n", s); - else + "if (e)\n"); + if(m->optional) + /* XXX should look at e */ + fprintf (codefile, + "%s = NULL;\n", s); + else + fprintf (codefile, + "return e;\n"); + fprintf (codefile, + "else {\n"); fprintf (codefile, - "return e;\n"); - fprintf (codefile, - "else {\n"); - fprintf (codefile, - "p += l;\n" - "len -= l;\n" - "ret += l;\n" - "e = der_get_length (p, len, &newlen, &l);\n" - "FORW;\n" - "{\n" + "p += l;\n" + "len -= l;\n" + "ret += l;\n" + "e = der_get_length (p, len, &newlen, &l);\n" + "FORW;\n" + "{\n" - "int dce_fix;\n" - "oldlen = len;\n" - "if((dce_fix = fix_dce(newlen, &len)) < 0)" - "return ASN1_BAD_FORMAT;\n"); - if (m->optional) - fprintf (codefile, - "%s = malloc(sizeof(*%s));\n", - s, s); - decode_type (s, m->type); - fprintf (codefile, - "if(dce_fix){\n" - "e = der_match_tag_and_length (p, len, 0, 0, 0, " - "&reallen, &l);\n" - "FORW;\n" - "}else \n" - "len = oldlen - newlen;\n" - "}\n" - "}\n"); - fprintf (codefile, - "}\n"); + "int dce_fix;\n" + "oldlen = len;\n" + "if((dce_fix = fix_dce(newlen, &len)) < 0)" + "return ASN1_BAD_FORMAT;\n"); + if (m->optional) + fprintf (codefile, + "%s = malloc(sizeof(*%s));\n", + s, s); + decode_type (s, m->type); + fprintf (codefile, + "if(dce_fix){\n" + "e = der_match_tag_and_length (p, len, 0, 0, 0, " + "&reallen, &l);\n" + "FORW;\n" + "}else \n" + "len = oldlen - newlen;\n" + "}\n" + "}\n"); + fprintf (codefile, + "}\n"); } if (tag == -1) tag = m->val; @@ -163,7 +163,7 @@ decode_type (char *name, Type *t) break; } case TSequenceOf: { - char *n = malloc(2*strlen(name) + 20); + char *n; fprintf (codefile, "e = der_match_tag_and_length (p, len, UNIV, CONS, UT_Sequence," @@ -180,7 +180,7 @@ decode_type (char *name, Type *t) "(%s)->len++;\n" "(%s)->val = realloc((%s)->val, sizeof(*((%s)->val)) * (%s)->len);\n", name, name, name, name, name, name, name); - sprintf (n, "&(%s)->val[(%s)->len-1]", name, name); + asprintf (&n, "&(%s)->val[(%s)->len-1]", name, name); decode_type (n, t->subtype); fprintf (codefile, "}\n"); diff --git a/lib/asn1/gen_encode.c b/lib/asn1/gen_encode.c index 14fb19677..4efeb5b4d 100644 --- a/lib/asn1/gen_encode.c +++ b/lib/asn1/gen_encode.c @@ -91,9 +91,9 @@ encode_type (char *name, Type *t) break; for (m = t->members->prev; m && tag != m->val; m = m->prev) { - char *s = malloc(2 + strlen(name) + 1 + strlen(m->gen_name) + 3); + char *s; - sprintf (s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); + asprintf (&s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); if (m->optional) fprintf (codefile, "if(%s)\n", @@ -124,7 +124,7 @@ encode_type (char *name, Type *t) break; } case TSequenceOf: { - char *n = malloc(strlen(name) + 12); + char *n; fprintf (codefile, "for(i = (%s)->len - 1; i >= 0; --i) {\n" @@ -135,7 +135,7 @@ encode_type (char *name, Type *t) , #endif name); - sprintf (n, "&(%s)->val[i]", name); + asprintf (&n, "&(%s)->val[i]", name); encode_type (n, t->subtype); fprintf (codefile, #if 1 diff --git a/lib/asn1/gen_free.c b/lib/asn1/gen_free.c index 8514f2d10..d32d8fcbd 100644 --- a/lib/asn1/gen_free.c +++ b/lib/asn1/gen_free.c @@ -34,9 +34,10 @@ free_type (char *name, Type *t) break; for (m = t->members; m && tag != m->val; m = m->next) { - char *s = malloc(2 + strlen(name) + 1 + strlen(m->gen_name) + 3); + char *s; - sprintf (s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); + asprintf (&s, "%s(%s)->%s", + m->optional ? "" : "&", name, m->gen_name); if(m->optional) fprintf(codefile, "if(%s) {\n", s); free_type (s, m->type); @@ -51,10 +52,10 @@ free_type (char *name, Type *t) break; } case TSequenceOf: { - char *n = malloc(2*strlen(name) + 20); + char *n; fprintf (codefile, "while((%s)->len){\n", name); - sprintf (n, "&(%s)->val[(%s)->len-1]", name, name); + asprintf (&n, "&(%s)->val[(%s)->len-1]", name, name); free_type(n, t->subtype); fprintf(codefile, "(%s)->len--;\n" diff --git a/lib/asn1/gen_length.c b/lib/asn1/gen_length.c index f5b5096d9..ed1b9a78a 100644 --- a/lib/asn1/gen_length.c +++ b/lib/asn1/gen_length.c @@ -41,9 +41,10 @@ length_type (char *name, Type *t, char *variable) break; for (m = t->members; m && tag != m->val; m = m->next) { - char *s = malloc(2 + strlen(name) + 1 + strlen(m->gen_name) + 3); + char *s; - sprintf (s, "%s(%s)->%s", m->optional ? "" : "&", name, m->gen_name); + asprintf (&s, "%s(%s)->%s", + m->optional ? "" : "&", name, m->gen_name); if (m->optional) fprintf (codefile, "if(%s)", s); fprintf (codefile, "{\n" @@ -62,7 +63,7 @@ length_type (char *name, Type *t, char *variable) break; } case TSequenceOf: { - char *n = malloc(2*strlen(name) + 20); + char *n; fprintf (codefile, "{\n" @@ -72,7 +73,7 @@ length_type (char *name, Type *t, char *variable) variable, variable); fprintf (codefile, "for(i = (%s)->len - 1; i >= 0; --i){\n", name); - sprintf (n, "&(%s)->val[i]", name); + asprintf (&n, "&(%s)->val[i]", name); length_type(n, t->subtype, variable); fprintf (codefile, "}\n");