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

Comparing ray/src/common/savqstr.c (file contents):
Revision 2.10 by greg, Fri Jun 1 19:17:17 2012 UTC vs.
Revision 2.12 by greg, Tue Oct 29 00:35:06 2024 UTC

# Line 18 | Line 18 | static const char RCSid[] = "$Id$";
18   #if 1
19  
20   char *
21 < savqstr(char *s)                        /* save a private string */
21 > savqstr(const char *s)                  /* save a private string */
22   {
23          char  *cp;
24          char  *newp;
25  
26 +        if (s == NULL)
27 +                return(NULL);
28 +        if (!*s)
29 +                return("");
30          for (cp = s; *cp++; )                   /* compute strlen()+1 */
31                  ;
32          newp = (char *)malloc(cp-s);
# Line 30 | Line 34 | savqstr(char *s)                       /* save a private string */
34                  eputs("out of memory in savqstr");
35                  quit(1);
36          }
37 <        for (cp = newp; (*cp++ = *s++); )               /* inline strcpy() */
37 >        for (cp = newp; (*cp++ = *s++); )       /* inline strcpy() */
38                  ;
39          return(newp);                           /* return new location */
40   }
# Line 39 | Line 43 | savqstr(char *s)                       /* save a private string */
43   void
44   freeqstr(char *s)                       /* free a private string */
45   {
46 <        if (s != NULL)
47 <                free((void *)s);
46 >        if (s != NULL && *s)
47 >                free(s);
48   }
49  
50   #else
# Line 70 | Line 74 | freeqstr(char *s)                      /* free a private string */
74  
75  
76   char *
77 < savqstr(char *s)                        /* save a private string */
77 > savqstr(const char *s)                  /* save a private string */
78   {
79          static char  *curp = NULL;              /* allocated memory pointer */
80          static unsigned  nrem = 0;              /* bytes remaining in block */
# Line 78 | Line 82 | savqstr(char *s)                       /* save a private string */
82          char  *cp;
83          unsigned  n;
84  
85 +        if (s == NULL)
86 +                return(NULL);
87 +        if (!*s)
88 +                return("");
89          for (cp = s; *cp++; )                   /* compute strlen()+1 */
90                  ;
91          if ((n = cp-s) > nrem) {                /* do we need more core? */
92                  bfree(curp, nrem);                      /* free remnant */
93                  while (n > nextalloc)
94                          nextalloc <<= 1;
95 <                if ((curp = bmalloc(nrem=nextalloc)) == NULL) {
95 >                if ((curp = (char *)bmalloc(nrem=nextalloc)) == NULL) {
96                          eputs("out of memory in savqstr");
97                          quit(1);
98                  }
# Line 103 | Line 111 | savqstr(char *s)                       /* save a private string */
111   void
112   freeqstr(char *s)               /* free a private string (not recommended) */
113   {
114 <        bfree(s, strlen(s)+1);
114 >        if (s != NULL && *s)
115 >                bfree(s, strlen(s)+1);
116   }
117  
118   #endif

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines