[BACK]Return to symbol.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / asn1_compile

Annotation of src/usr.bin/asn1_compile/symbol.c, Revision 1.2

1.1       hin         1: /*
                      2:  * Copyright (c) 1997 - 2001 Kungliga Tekniska Högskolan
                      3:  * (Royal Institute of Technology, Stockholm, Sweden).
                      4:  * All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  *
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  *
                     13:  * 2. Redistributions in binary form must reproduce the above copyright
                     14:  *    notice, this list of conditions and the following disclaimer in the
                     15:  *    documentation and/or other materials provided with the distribution.
                     16:  *
                     17:  * 3. Neither the name of the Institute nor the names of its contributors
                     18:  *    may be used to endorse or promote products derived from this software
                     19:  *    without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
                     22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
                     25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     31:  * SUCH DAMAGE.
                     32:  */
                     33:
                     34: #include "gen_locl.h"
                     35:
                     36: /*
                     37: RCSID("$KTH: symbol.c,v 1.9 2001/09/25 13:39:27 assar Exp $");
                     38: */
                     39:
                     40: static Hashtab *htab;
                     41:
                     42: static int
                     43: cmp (void *a, void *b)
                     44: {
                     45:   Symbol *s1 = (Symbol *)a;
                     46:   Symbol *s2 = (Symbol *)b;
                     47:
                     48:   return strcmp (s1->name, s2->name);
                     49: }
                     50:
                     51: static unsigned
                     52: hash (void *a)
                     53: {
                     54:   Symbol *s = (Symbol *)a;
                     55:
                     56:   return hashjpw (s->name);
                     57: }
                     58:
                     59: void
                     60: initsym (void)
                     61: {
                     62:   htab = hashtabnew (101, cmp, hash);
                     63: }
                     64:
                     65:
                     66: void
                     67: output_name (char *s)
                     68: {
                     69:   char *p;
                     70:
                     71:   for (p = s; *p; ++p)
                     72:     if (*p == '-')
                     73:       *p = '_';
                     74: }
                     75:
                     76: Symbol*
                     77: addsym (char *name)
                     78: {
                     79:   Symbol key, *s;
                     80:
                     81:   key.name = name;
                     82:   s = (Symbol *)hashtabsearch (htab, (void *)&key);
                     83:   if (s == NULL) {
                     84:     s = (Symbol *)malloc (sizeof (*s));
1.2     ! jaredy     85:     if (s == NULL)
        !            86:        err(1, NULL);
1.1       hin        87:     s->name = name;
1.2     ! jaredy     88:     if ((s->gen_name = strdup(name)) == NULL)
        !            89:        err(1, NULL);
1.1       hin        90:     output_name (s->gen_name);
                     91:     s->stype = SUndefined;
                     92:     hashtabadd (htab, s);
                     93:   }
                     94:   return s;
                     95: }