diff options
Diffstat (limited to 'lib/asn1/gen_copy.c')
| -rw-r--r-- | lib/asn1/gen_copy.c | 96 | 
1 files changed, 49 insertions, 47 deletions
| diff --git a/lib/asn1/gen_copy.c b/lib/asn1/gen_copy.c index abf11859d5f4..36f68ee5d99c 100644 --- a/lib/asn1/gen_copy.c +++ b/lib/asn1/gen_copy.c @@ -1,46 +1,46 @@  /* - * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan - * (Royal Institute of Technology, Stockholm, Sweden).  - * All rights reserved.  + * Copyright (c) 1997 - 2005 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved.   * - * Redistribution and use in source and binary forms, with or without  - * modification, are permitted provided that the following conditions  - * are met:  + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met:   * - * 1. Redistributions of source code must retain the above copyright  - *    notice, this list of conditions and the following disclaimer.  + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer.   * - * 2. Redistributions in binary form must reproduce the above copyright  - *    notice, this list of conditions and the following disclaimer in the  - *    documentation and/or other materials provided with the distribution.  + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution.   * - * 3. Neither the name of the Institute nor the names of its contributors  - *    may be used to endorse or promote products derived from this software  - *    without specific prior written permission.  + * 3. Neither the name of the Institute nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission.   * - * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND  - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  - * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE  - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  - * SUCH DAMAGE.  + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE.   */  #include "gen_locl.h" -RCSID("$Id: gen_copy.c 19539 2006-12-28 17:15:05Z lha $"); +RCSID("$Id$");  static int used_fail;  static void  copy_primitive (const char *typename, const char *from, const char *to)  { -    fprintf (codefile, "if(der_copy_%s(%s, %s)) goto fail;\n",  +    fprintf (codefile, "if(der_copy_%s(%s, %s)) goto fail;\n",  	     typename, from, to);      used_fail++;  } @@ -53,7 +53,7 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)  #if 0  	copy_type (from, to, t->symbol->type, preserve);  #endif -	fprintf (codefile, "if(copy_%s(%s, %s)) goto fail;\n",  +	fprintf (codefile, "if(copy_%s(%s, %s)) goto fail;\n",  		 t->symbol->gen_name, from, to);  	used_fail++;  	break; @@ -82,7 +82,7 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)  	if(t->members == NULL)  	    break; -       +  	if ((t->type == TSequence || t->type == TChoice) && preserve) {  	    fprintf(codefile,  		    "{ int ret;\n" @@ -110,14 +110,16 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)  	    if(t->type == TChoice)  		fprintf(codefile, "case %s:\n", m->label); -	    asprintf (&fs, "%s(%s)->%s%s", -		      m->optional ? "" : "&", from,  -		      t->type == TChoice ? "u." : "", m->gen_name); +	    if (asprintf (&fs, "%s(%s)->%s%s", +			  m->optional ? "" : "&", from, +			  t->type == TChoice ? "u." : "", m->gen_name) < 0) +		errx(1, "malloc");  	    if (fs == NULL)  		errx(1, "malloc"); -	    asprintf (&ts, "%s(%s)->%s%s", -		      m->optional ? "" : "&", to,  -		      t->type == TChoice ? "u." : "", m->gen_name); +	    if (asprintf (&ts, "%s(%s)->%s%s", +			  m->optional ? "" : "&", to, +			  t->type == TChoice ? "u." : "", m->gen_name) < 0) +		errx(1, "malloc");  	    if (ts == NULL)  		errx(1, "malloc");  	    if(m->optional){ @@ -145,31 +147,32 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)  			"break;\n"  			"}\n",  			have_ellipsis->label, -			from, have_ellipsis->gen_name,  +			from, have_ellipsis->gen_name,  			to, have_ellipsis->gen_name);  		used_fail++;  	    } -	    fprintf(codefile, "}\n");	 +	    fprintf(codefile, "}\n");  	}  	break;      }      case TSetOf:      case TSequenceOf: { -	char *f; -	char *T; +	char *f = NULL, *T = NULL;  	fprintf (codefile, "if(((%s)->val = " -		 "malloc((%s)->len * sizeof(*(%s)->val))) == NULL && (%s)->len != 0)\n",  +		 "malloc((%s)->len * sizeof(*(%s)->val))) == NULL && (%s)->len != 0)\n",  		 to, from, to, from);  	fprintf (codefile, "goto fail;\n");  	used_fail++;  	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); +	if (asprintf(&f, "&(%s)->val[(%s)->len]", from, to) < 0) +	    errx(1, "malloc");  	if (f == NULL)  	    errx(1, "malloc"); -	asprintf(&T, "&(%s)->val[(%s)->len]", to, to); +	if (asprintf(&T, "&(%s)->val[(%s)->len]", to, to) < 0) +	    errx(1, "malloc");  	if (T == NULL)  	    errx(1, "malloc");  	copy_type(f, T, t->subtype, FALSE); @@ -184,6 +187,9 @@ copy_type (const char *from, const char *to, const Type *t, int preserve)      case TGeneralString:  	copy_primitive ("general_string", from, to);  	break; +    case TTeletexString: +	copy_primitive ("general_string", from, to); +	break;      case TUTCTime:  	fprintf(codefile, "*(%s) = *(%s);\n", to, from);  	break; @@ -225,11 +231,7 @@ generate_type_copy (const Symbol *s)    used_fail = 0; -  fprintf (headerfile, -	   "int    copy_%s  (const %s *, %s *);\n", -	   s->gen_name, s->gen_name, s->gen_name); - -  fprintf (codefile, "int\n" +  fprintf (codefile, "int ASN1CALL\n"  	   "copy_%s(const %s *from, %s *to)\n"  	   "{\n"  	   "memset(to, 0, sizeof(*to));\n", | 
