Commit | Line | Data |
---|---|---|
60de5df9 | 1 | /* |
46e9ea25 KB |
2 | * Copyright (c) 1983 Regents of the University of California. |
3 | * All rights reserved. | |
4 | * | |
5 | * Redistribution and use in source and binary forms are permitted | |
5e8b0e60 KB |
6 | * provided that the above copyright notice and this paragraph are |
7 | * duplicated in all such forms and that any documentation, | |
8 | * advertising materials, and other materials related to such | |
9 | * distribution and use acknowledge that the software was developed | |
10 | * by the University of California, Berkeley. The name of the | |
11 | * University may not be used to endorse or promote products derived | |
12 | * from this software without specific prior written permission. | |
13 | * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR | |
14 | * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED | |
15 | * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. | |
60de5df9 EW |
16 | */ |
17 | ||
46e9ea25 | 18 | #ifndef lint |
5e8b0e60 | 19 | static char sccsid[] = "@(#)wwalloc.c 3.9 (Berkeley) %G%"; |
46e9ea25 KB |
20 | #endif /* not lint */ |
21 | ||
ce3cd9c6 EW |
22 | #include "ww.h" |
23 | ||
24 | char ** | |
f2a77fe1 | 25 | wwalloc(row, col, nrow, ncol, size) |
ce3cd9c6 | 26 | { |
64431033 | 27 | register char *p, **pp; |
ce3cd9c6 EW |
28 | register int i; |
29 | ||
64431033 EW |
30 | /* fast, call malloc only once */ |
31 | pp = (char **) | |
32 | malloc((unsigned) sizeof (char **) * nrow + size * nrow * ncol); | |
03e75950 EW |
33 | if (pp == 0) { |
34 | wwerrno = WWE_NOMEM; | |
ce3cd9c6 | 35 | return 0; |
03e75950 | 36 | } |
64431033 | 37 | p = (char *)&pp[nrow]; |
f2a77fe1 | 38 | col *= size; |
64431033 EW |
39 | size /= sizeof (char); /* paranoid */ |
40 | size *= ncol; | |
ce3cd9c6 | 41 | for (i = 0; i < nrow; i++) { |
f2a77fe1 | 42 | pp[i] = p - col; |
64431033 | 43 | p += size; |
ce3cd9c6 | 44 | } |
f2a77fe1 | 45 | return pp - row; |
ce3cd9c6 EW |
46 | } |
47 | ||
f2a77fe1 | 48 | wwfree(p, row) |
ce3cd9c6 EW |
49 | register char **p; |
50 | { | |
f2a77fe1 | 51 | free((char *)(p + row)); |
ce3cd9c6 | 52 | } |