grep: fix some memory leaks.
Bring a couple of changes from NetBSD: queue.c (CVS Rev. 1.4. 1.5) Fix memory leaks. NULL does not need a cast. grep.c (CVS Rev. 1.6) Use the more portable getline. Obtained from: NetBSD MFC after: 3 days
This commit is contained in:
parent
78bef01fe4
commit
f3f50de623
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=268799
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: grep.c,v 1.4 2011/02/16 01:31:33 joerg Exp $ */
|
||||
/* $NetBSD: grep.c,v 1.6 2011/04/18 03:48:23 joerg Exp $ */
|
||||
/* $FreeBSD$ */
|
||||
/* $OpenBSD: grep.c,v 1.42 2010/07/02 22:18:03 tedu Exp $ */
|
||||
|
||||
@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <libgen.h>
|
||||
#include <locale.h>
|
||||
#include <stdbool.h>
|
||||
#define _WITH_GETLINE
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -304,6 +305,7 @@ read_patterns(const char *fn)
|
||||
FILE *f;
|
||||
char *line;
|
||||
size_t len;
|
||||
ssize_t rlen;
|
||||
|
||||
if ((f = fopen(fn, "r")) == NULL)
|
||||
err(2, "%s", fn);
|
||||
@ -311,8 +313,11 @@ read_patterns(const char *fn)
|
||||
fclose(f);
|
||||
return;
|
||||
}
|
||||
while ((line = fgetln(f, &len)) != NULL)
|
||||
len = 0;
|
||||
line = NULL;
|
||||
while ((rlen = getline(&line, &len, f)) != -1)
|
||||
add_pattern(line, line[0] == '\n' ? 0 : len);
|
||||
free(line);
|
||||
if (ferror(f))
|
||||
err(2, "%s", fn);
|
||||
fclose(f);
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: queue.c,v 1.2 2011/02/16 01:31:33 joerg Exp $ */
|
||||
/* $NetBSD: queue.c,v 1.5 2011/08/31 16:24:57 plunky Exp $ */
|
||||
/* $FreeBSD$ */
|
||||
|
||||
/*-
|
||||
@ -68,8 +68,11 @@ enqueue(struct str *x)
|
||||
|
||||
STAILQ_INSERT_TAIL(&queue, item, list);
|
||||
|
||||
if (++count > Bflag)
|
||||
free(dequeue());
|
||||
if (++count > Bflag) {
|
||||
item = dequeue();
|
||||
free(item->data.dat);
|
||||
free(item);
|
||||
}
|
||||
}
|
||||
|
||||
static struct qentry *
|
||||
@ -92,7 +95,7 @@ printqueue(void)
|
||||
struct qentry *item;
|
||||
|
||||
while ((item = dequeue()) != NULL) {
|
||||
printline(&item->data, '-', (regmatch_t *)NULL, 0);
|
||||
printline(&item->data, '-', NULL, 0);
|
||||
free(item);
|
||||
}
|
||||
}
|
||||
@ -102,6 +105,8 @@ clearqueue(void)
|
||||
{
|
||||
struct qentry *item;
|
||||
|
||||
while ((item = dequeue()) != NULL)
|
||||
while ((item = dequeue()) != NULL) {
|
||||
free(item->data.dat);
|
||||
free(item);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user