annotate alloc.c @ 8:23c546c01f17

fix clean target, add it_production (now default) and it_debug targets
author Henry S. Thompson <ht@inf.ed.ac.uk>
date Wed, 29 Jan 2025 18:46:57 +0000
parents 2cb46628feec
children 3bfef1f22a97
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
1 #include "alloc.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
2 #include "error.h"
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
3 extern char *malloc();
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
4 extern void free();
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
5
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
6 #define ALIGNMENT 16 /* XXX: assuming that this alignment is enough */
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
7 #define SPACE 4096 /* must be multiple of ALIGNMENT */
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
8
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
9 typedef union { char irrelevant[ALIGNMENT]; double d; } aligned;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
10 static aligned realspace[SPACE / ALIGNMENT];
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
11 #define space ((char *) realspace)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
12 static unsigned int avail = SPACE; /* multiple of ALIGNMENT; 0<=avail<=SPACE */
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
13
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
14 /*@null@*//*@out@*/char *alloc(n)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
15 unsigned int n;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
16 {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
17 char *x;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
18 n = ALIGNMENT + n - (n & (ALIGNMENT - 1)); /* XXX: could overflow */
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
19 if (n <= avail) { avail -= n; return space + avail; }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
20 x = malloc(n);
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
21 if (!x) errno = error_nomem;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
22 return x;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
23 }
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
24
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
25 void alloc_free(x)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
26 char *x;
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
27 {
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
28 if (x >= space)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
29 if (x < space + SPACE)
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
30 return; /* XXX: assuming that pointers are flat */
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
31 free(x);
2cb46628feec from cdb-0.75 per http://cr.yp.to/cdb.html,
Henry S. Thompson <ht@inf.ed.ac.uk>
parents:
diff changeset
32 }