summaryrefslogtreecommitdiffstats
path: root/usr.bin
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2007-10-17 09:52:08 +0000
committerkib <kib@FreeBSD.org>2007-10-17 09:52:08 +0000
commit6c514f41e9ac5e7036e15de0104abd3caa498550 (patch)
tree31fb9938b56dbf9e527e0383282c05631cdd4733 /usr.bin
parent3cc917d96eca7bff317a4854042bab69c2fe3c11 (diff)
downloadFreeBSD-src-6c514f41e9ac5e7036e15de0104abd3caa498550.zip
FreeBSD-src-6c514f41e9ac5e7036e15de0104abd3caa498550.tar.gz
Fix various memory leaks.
Submitted by: rdivacky Obtained from: OpenBSD MFC after: 1 week
Diffstat (limited to 'usr.bin')
-rw-r--r--usr.bin/tail/read.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/usr.bin/tail/read.c b/usr.bin/tail/read.c
index ff66f78..d04d158 100644
--- a/usr.bin/tail/read.c
+++ b/usr.bin/tail/read.c
@@ -85,6 +85,7 @@ bytes(FILE *fp, off_t off)
}
if (ferror(fp)) {
ierr();
+ free(sp);
return 1;
}
@@ -119,6 +120,8 @@ bytes(FILE *fp, off_t off)
if (len)
WR(sp, len);
}
+
+ free(sp);
return 0;
}
@@ -140,7 +143,7 @@ lines(FILE *fp, off_t off)
u_int len;
char *l;
} *llines;
- int ch;
+ int ch, rc;
char *p, *sp;
int blen, cnt, recno, wrap;
@@ -149,6 +152,7 @@ lines(FILE *fp, off_t off)
bzero(llines, off * sizeof(*llines));
sp = NULL;
blen = cnt = recno = wrap = 0;
+ rc = 0;
while ((ch = getc(fp)) != EOF) {
if (++cnt > blen) {
@@ -175,7 +179,8 @@ lines(FILE *fp, off_t off)
}
if (ferror(fp)) {
ierr();
- return 1;
+ rc = 1;
+ goto done;
}
if (cnt) {
llines[recno].l = sp;
@@ -199,5 +204,10 @@ lines(FILE *fp, off_t off)
for (cnt = 0; cnt < recno; ++cnt)
WR(llines[cnt].l, llines[cnt].len);
}
- return 0;
+done:
+ for (cnt = 0; cnt < off; cnt++)
+ free(llines[cnt].l);
+ free(sp);
+ free(llines);
+ return (rc);
}
OpenPOWER on IntegriCloud