ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/savestr.c
(Generate patch)

Comparing ray/src/common/savestr.c (file contents):
Revision 2.5 by greg, Sat Feb 22 02:07:22 2003 UTC vs.
Revision 2.12 by greg, Sat Dec 28 18:05:14 2019 UTC

# Line 18 | Line 18 | static const char      RCSid[] = "$Id$";
18   *  External symbols declared in standard.h
19   */
20  
21 < /* ====================================================================
22 < * The Radiance Software License, Version 1.0
23 < *
24 < * Copyright (c) 1990 - 2002 The Regents of the University of California,
25 < * through Lawrence Berkeley National Laboratory.   All rights reserved.
26 < *
27 < * Redistribution and use in source and binary forms, with or without
28 < * modification, are permitted provided that the following conditions
29 < * are met:
30 < *
31 < * 1. Redistributions of source code must retain the above copyright
32 < *         notice, this list of conditions and the following disclaimer.
33 < *
34 < * 2. Redistributions in binary form must reproduce the above copyright
35 < *       notice, this list of conditions and the following disclaimer in
36 < *       the documentation and/or other materials provided with the
37 < *       distribution.
38 < *
39 < * 3. The end-user documentation included with the redistribution,
40 < *           if any, must include the following acknowledgment:
41 < *             "This product includes Radiance software
42 < *                 (http://radsite.lbl.gov/)
43 < *                 developed by the Lawrence Berkeley National Laboratory
44 < *               (http://www.lbl.gov/)."
45 < *       Alternately, this acknowledgment may appear in the software itself,
46 < *       if and wherever such third-party acknowledgments normally appear.
47 < *
48 < * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
49 < *       and "The Regents of the University of California" must
50 < *       not be used to endorse or promote products derived from this
51 < *       software without prior written permission. For written
52 < *       permission, please contact [email protected].
53 < *
54 < * 5. Products derived from this software may not be called "Radiance",
55 < *       nor may "Radiance" appear in their name, without prior written
56 < *       permission of Lawrence Berkeley National Laboratory.
57 < *
58 < * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
59 < * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
60 < * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
61 < * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
62 < * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
63 < * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
64 < * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
65 < * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
66 < * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
67 < * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
68 < * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
69 < * SUCH DAMAGE.
70 < * ====================================================================
71 < *
72 < * This software consists of voluntary contributions made by many
73 < * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
74 < * information on Lawrence Berkeley National Laboratory, please see
75 < * <http://www.lbl.gov/>.
76 < */
21 > #include "copyright.h"
22  
23 + #include <stdlib.h>
24 +
25 + #include "rtmisc.h"
26 + #include "rterror.h"
27 + #include "rtio.h"
28 +
29   #ifndef  NHASH
30 < #define  NHASH          509             /* hash table size (prime!) */
30 > #define  NHASH          2039            /* hash table size (prime!) */
31   #endif
32  
33   typedef struct s_head {
# Line 88 | Line 39 | static S_HEAD  *stab[NHASH];
39  
40   #define  hash(s)        (shash(s)%NHASH)
41  
91 extern char  *savestr(), *strcpy(), *malloc();
92
93 #define  NULL           0
94
42   #define  string(sp)     ((char *)((sp)+1))
43  
44   #define  salloc(str)    (S_HEAD *)malloc(sizeof(S_HEAD)+1+strlen(str))
# Line 100 | Line 47 | extern char  *savestr(), *strcpy(), *malloc();
47  
48  
49   char *
50 < savestr(str)                            /* save a string */
104 < char  *str;
50 > savestr(char *str)                              /* save a string */
51   {
52 <        register int  hval;
53 <        register S_HEAD  *sp;
52 >        int  hval;
53 >        S_HEAD  *sp;
54  
55          if (str == NULL)
56                  return(NULL);
57 +        if (!*str)
58 +                return "";
59          hval = hash(str);
60          for (sp = stab[hval]; sp != NULL; sp = sp->next)
61                  if (!strcmp(str, string(sp))) {
# Line 127 | Line 75 | char  *str;
75  
76  
77   void
78 < freestr(s)                              /* free a string */
131 < char  *s;
78 > freestr(char *s)                                /* free a string */
79   {
80          int  hval;
81 <        register S_HEAD  *spl, *sp;
81 >        S_HEAD  *spl, *sp;
82  
83 <        if (s == NULL)
83 >        if (s == NULL || !*s)
84                  return;
85          hval = hash(s);
86          for (spl = NULL, sp = stab[hval]; sp != NULL; spl = sp, sp = sp->next)
# Line 151 | Line 98 | char  *s;
98  
99  
100   int
101 < shash(s)
155 < register char  *s;
101 > shash(char *s)
102   {
103 <        register int  h = 0;
103 >        int  h = 0;
104  
105          while (*s)
106                  h = (h<<1 & 0x7fff) ^ (*s++ & 0xff);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines