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

Comparing ray/src/common/malloc.c (file contents):
Revision 1.1 by greg, Tue Sep 25 17:14:04 1990 UTC vs.
Revision 1.2 by greg, Tue Sep 25 18:56:37 1990 UTC

# Line 52 | Line 52 | register unsigned  n;
52          register char   *p;
53  
54          if (pagesz == 0) {                              /* initialize */
55 <                amnt = pagesz = getpagesize();
55 >                pagesz = amnt = getpagesize();
56                  nrem = (int)sbrk(0);                    /* page align break */
57                  nrem = pagesz - (nrem&(pagesz-1));
58                  bpos = sbrk(nrem);                      /* word aligned! */
# Line 83 | Line 83 | register unsigned  n;
83  
84  
85   bfree(p, n)                     /* free n bytes of random memory */
86 < char  *p;
87 < unsigned  n;
86 > register char  *p;
87 > register unsigned  n;
88   {
89        register M_HEAD *mp;
89          register int    bucket;
90          register unsigned       bsiz;
91                                          /* find largest bucket */
92          bucket = 0;
93          for (bsiz = 1; bsiz+sizeof(M_HEAD) <= n; bsiz <<= 1)
94                  bucket++;
96        mp = (M_HEAD *)p;
95          while (bucket > FIRSTBUCKET) {
96                  bsiz >>= 1;
97                  bucket--;
98                  if (n < bsiz+sizeof(M_HEAD))    /* nothing for this bucket */
99                          continue;
100 <                mp->next = free_list[bucket];
101 <                free_list[bucket] = mp;
102 <                (char *)mp += bsiz+sizeof(M_HEAD);
100 >                ((M_HEAD *)p)->next = free_list[bucket];
101 >                free_list[bucket] = (M_HEAD *)p;
102 >                p += bsiz+sizeof(M_HEAD);
103                  n -= bsiz+sizeof(M_HEAD);
104          }
105   }
# Line 115 | Line 113 | unsigned       n;
113          register int    bucket;
114          register unsigned       bsiz;
115  
116 +        if (n == 0)
117 +                return(NULL);
118 +                                        /* find first bucket that fits */
119          bucket = FIRSTBUCKET;
120          for (bsiz = 1<<FIRSTBUCKET; bsiz < n; bsiz <<= 1)
121                  bucket++;
# Line 146 | Line 147 | unsigned       n;
147          if (n <= on && n > on>>1)
148                  return(op);             /* same bucket */
149          p = malloc(n);
150 <        if (p == NULL)
150 <                return(NULL);
150 >        if (p != NULL)
151   #ifdef  BSD
152 <        bcopy(op, p, n>on ? on : n);
152 >                bcopy(op, p, n>on ? on : n);
153   #else
154 <        (void)memcpy(p, op, n>on ? on : n);
154 >                (void)memcpy(p, op, n>on ? on : n);
155   #endif
156          free(op);
157          return(p);
# Line 164 | Line 164 | char   *p;
164          register M_HEAD *mp;
165          register int    bucket;
166  
167 +        if (p == NULL)
168 +                return;
169          mp = (M_HEAD *)p - 1;
170          bucket = mp->bucket;
171          mp->next = free_list[bucket];

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines