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

Comparing ray/src/common/bmalloc.c (file contents):
Revision 2.1 by greg, Tue Nov 12 16:55:20 1991 UTC vs.
Revision 2.5 by schorsch, Thu Jul 17 09:21:29 2003 UTC

# Line 1 | Line 1
1 /* Copyright (c) 1991 Regents of the University of California */
2
1   #ifndef lint
2 < static char SCCSid[] = "$SunId$ LBL";
2 > static const char       RCSid[] = "$Id$";
3   #endif
6
4   /*
5   * Bmalloc provides basic memory allocation without overhead (no free lists).
6   * Use only to take the load off of malloc for all those
7   * piddling little requests that you never expect to free.
8   * Bmalloc defers to malloc for big requests.
9   * Bfree should hand memory to bmalloc, but it usually fails here.
10 + *
11 + *  External symbols declared in standard.h
12   */
13  
14 < #define  NULL           0
14 > #include "copyright.h"
15  
16 + #include <stdlib.h>
17 +
18 + #include "rtmisc.h"
19 +
20   #ifndef  MBLKSIZ
21   #define  MBLKSIZ        16376           /* size of memory allocation block */
22   #endif
23   #define  WASTEFRAC      12              /* don't waste more than a fraction */
24 < #ifndef  ALIGN
25 < #define  ALIGN          int             /* type for alignment */
24 > #ifndef  ALIGNT
25 > #define  ALIGNT         double          /* type for alignment */
26   #endif
27 < #define  BYTES_WORD     sizeof(ALIGN)
27 > #define  BYTES_WORD     sizeof(ALIGNT)
28  
26 extern char  *malloc();
27
29   static char  *bposition = NULL;
30 < static unsigned  nremain = 0;
30 > static unsigned int  nremain = 0;
31  
32  
33   char *
34 < bmalloc(n)              /* allocate a block of n bytes, no refunds */
35 < register unsigned  n;
34 > bmalloc(n)              /* allocate a block of n bytes */
35 > register unsigned int  n;
36   {
37          if (n > nremain && (n > MBLKSIZ || nremain > MBLKSIZ/WASTEFRAC))
38                  return(malloc(n));                      /* too big */
39  
40          n = (n+(BYTES_WORD-1))&~(BYTES_WORD-1);         /* word align */
41  
42 <        if (n > nremain) {
43 <                if ((bposition = malloc((unsigned)MBLKSIZ)) == NULL) {
44 <                        nremain = 0;
44 <                        return(NULL);
45 <                }
46 <                nremain = MBLKSIZ;
42 >        if (n > nremain && (bposition = (char *)malloc(nremain = MBLKSIZ)) == NULL) {
43 >                nremain = 0;
44 >                return(NULL);
45          }
46          bposition += n;
47          nremain -= n;
# Line 51 | Line 49 | register unsigned  n;
49   }
50  
51  
52 + void
53   bfree(p, n)                     /* free random memory */
54   register char   *p;
55 < register unsigned       n;
55 > register unsigned int   n;
56   {
57 <        register unsigned       bsiz;
57 >        register unsigned int   bsiz;
58                                          /* check alignment */
59 <        bsiz = BYTES_WORD - ((unsigned)p&(BYTES_WORD-1));
59 >        bsiz = BYTES_WORD - ((unsigned int)p&(BYTES_WORD-1));
60          if (bsiz < BYTES_WORD) {
61                  p += bsiz;
62                  n -= bsiz;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines