1 /*
2 * Copyright (c) 1983, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Edward Wang at The University of California, Berkeley.
7 *
8 * %sccs.include.redist.c%
9 */
10
11 #ifndef lint
12 static char sccsid[] = "@(#)wwalloc.c 8.1 (Berkeley) 06/06/93";
13 #endif /* not lint */
14
15 #include "ww.h"
16
17 char **
wwalloc(row,col,nrow,ncol,size)18 wwalloc(row, col, nrow, ncol, size)
19 {
20 register char *p, **pp;
21 register int i;
22
23 /* fast, call malloc only once */
24 pp = (char **)
25 malloc((unsigned) sizeof (char **) * nrow + size * nrow * ncol);
26 if (pp == 0) {
27 wwerrno = WWE_NOMEM;
28 return 0;
29 }
30 p = (char *)&pp[nrow];
31 col *= size;
32 size /= sizeof (char); /* paranoid */
33 size *= ncol;
34 for (i = 0; i < nrow; i++) {
35 pp[i] = p - col;
36 p += size;
37 }
38 return pp - row;
39 }
40
wwfree(p,row)41 wwfree(p, row)
42 register char **p;
43 {
44 free((char *)(p + row));
45 }
46