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.6 by greg, Thu May 15 05:13:35 2003 UTC vs.
Revision 2.11 by greg, Tue Feb 1 18:43:26 2022 UTC

# Line 11 | Line 11 | static const char RCSid[] = "$Id$";
11  
12   #include <stdlib.h>
13  
14 < extern void     eputs();
15 < extern void     quit();
14 > #include "rtio.h"
15 > #include "rterror.h"
16  
17 +
18   #if 1
19  
20   char *
21 < savqstr(s)                      /* save a private string */
21 < register char  *s;
21 > savqstr(char *s)                        /* save a private string */
22   {
23 <        register char  *cp;
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 | register char  *s;
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   }
41  
42  
43   void
44 < freeqstr(s)                     /* free a private string */
41 < char  *s;
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 51 | Line 54 | char  *s;
54   *  large blocks to optimize paging in VM environments.
55   */
56  
57 + #include "rtmisc.h"
58 +
59   #ifdef  SMLMEM
60   #ifndef  MINBLOCK
61   #define  MINBLOCK       (1<<10)         /* minimum allocation block size */
# Line 67 | Line 72 | char  *s;
72   #endif
73   #endif
74  
70 extern char  *bmalloc();
75  
72
76   char *
77 < savqstr(s)                      /* save a private string */
75 < register char  *s;
77 > savqstr(char *s)                        /* save a private string */
78   {
79          static char  *curp = NULL;              /* allocated memory pointer */
80          static unsigned  nrem = 0;              /* bytes remaining in block */
81          static unsigned  nextalloc = MINBLOCK;  /* next block size */
82 <        register char  *cp;
83 <        register unsigned  n;
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 109 | register char  *s;
109  
110  
111   void
112 < freeqstr(s)                     /* free a private string (not recommended) */
107 < char  *s;
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