PR/51572: calling funopen on each printw call is a tad excessive, but this

is not a reason for funopen to leak. Always call the close function since we
are indirecting through our cookie and we need to free it.
This commit is contained in:
christos 2016-10-23 21:01:52 +00:00
parent 647468f389
commit 5b486ace20
1 changed files with 5 additions and 4 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: funopen.c,v 1.14 2012/03/28 15:21:11 christos Exp $ */
/* $NetBSD: funopen.c,v 1.15 2016/10/23 21:01:52 christos Exp $ */
/*-
* Copyright (c) 1990, 1993
@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)funopen.c 8.1 (Berkeley) 6/4/93";
#else
__RCSID("$NetBSD: funopen.c,v 1.14 2012/03/28 15:21:11 christos Exp $");
__RCSID("$NetBSD: funopen.c,v 1.15 2016/10/23 21:01:52 christos Exp $");
#endif
#endif /* LIBC_SCCS and not lint */
@ -138,6 +138,8 @@ cclosefn(void *dookie)
void *c = d->cookie;
int (*cf)(void *) = d->closefn;
free(dookie);
if (cf == NULL)
return 0;
return (*cf)(c);
}
@ -163,8 +165,7 @@ funopen(const void *cookie,
d->readfn ? creadfn : NULL,
d->writefn ? cwritefn : NULL,
d->seekfn ? cseekfn : NULL,
NULL,
d->closefn ? cclosefn : NULL);
NULL, cclosefn);
if (fp != NULL)
return fp;
free(d);