projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix queue pattern (from chris@maryland)
[unix-history]
/
usr
/
src
/
usr.bin
/
window
/
wwalloc.c
diff --git
a/usr/src/usr.bin/window/wwalloc.c
b/usr/src/usr.bin/window/wwalloc.c
index
4df747d
..
6a463f0
100644
(file)
--- a/
usr/src/usr.bin/window/wwalloc.c
+++ b/
usr/src/usr.bin/window/wwalloc.c
@@
-1,36
+1,35
@@
#ifndef lint
#ifndef lint
-static char
*sccsid = "@(#)wwalloc.c 3.1 83/08/09
";
+static char
sccsid[] = "@(#)wwalloc.c 3.6 %G%
";
#endif
#include "ww.h"
char **
#endif
#include "ww.h"
char **
-wwalloc(nrow, ncol, size)
+wwalloc(
row, col,
nrow, ncol, size)
{
{
- register char *
*
p;
+ register char *
p, **p
p;
register int i;
register int i;
- p = (char **) malloc((unsigned) nrow * sizeof (char *));
- if (p == 0)
+ /* fast, call malloc only once */
+ pp = (char **)
+ malloc((unsigned) sizeof (char **) * nrow + size * nrow * ncol);
+ if (pp == 0) {
+ wwerrno = WWE_NOMEM;
return 0;
return 0;
+ }
+ p = (char *)&pp[nrow];
+ col *= size;
+ size /= sizeof (char); /* paranoid */
+ size *= ncol;
for (i = 0; i < nrow; i++) {
for (i = 0; i < nrow; i++) {
- p[i] = malloc((unsigned) ncol * size);
- if (p[i] == 0) {
- wwfree(p, i);
- return 0;
- }
+ pp[i] = p - col;
+ p += size;
}
}
- return p;
+ return p
p - row
;
}
}
-wwfree(p,
n
row)
+wwfree(p, row)
register char **p;
{
register char **p;
{
- register int i;
-
- if (p == 0)
- return;
- for (i = 0; i < nrow; i++)
- free(p[i]);
- free((char *)p);
+ free((char *)(p + row));
}
}