diff options
Diffstat (limited to 'winsup/cygwin/regex/regfree.c')
-rw-r--r-- | winsup/cygwin/regex/regfree.c | 67 |
1 files changed, 59 insertions, 8 deletions
diff --git a/winsup/cygwin/regex/regfree.c b/winsup/cygwin/regex/regfree.c index b8be143d8..aa795fa78 100644 --- a/winsup/cygwin/regex/regfree.c +++ b/winsup/cygwin/regex/regfree.c @@ -1,8 +1,51 @@ -#include "winsup.h" +/*- + * Copyright (c) 1992, 1993, 1994 Henry Spencer. + * Copyright (c) 1992, 1993, 1994 + * The Regents of the University of California. All rights reserved. + * + * This code is derived from software contributed to Berkeley by + * Henry Spencer. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @(#)regfree.c 8.3 (Berkeley) 3/20/94 + */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "@(#)regfree.c 8.3 (Berkeley) 3/20/94"; +#endif /* LIBC_SCCS and not lint */ +#include <sys/cdefs.h> +__FBSDID("$FreeBSD: src/lib/libc/regex/regfree.c,v 1.8 2007/06/11 03:05:54 delphij Exp $"); + #include <sys/types.h> #include <stdio.h> #include <stdlib.h> -#include "regex.h" +#include <limits.h> +#include <regex.h> +#include <wchar.h> +#include <wctype.h> #include "utils.h" #include "regex2.h" @@ -12,10 +55,10 @@ = extern void regfree(regex_t *); */ void -regfree(preg) -regex_t *preg; +regfree(regex_t *preg) { - register struct re_guts *g; + struct re_guts *g; + int i; if (preg->re_magic != MAGIC1) /* oops */ return; /* nice to complain, but hard */ @@ -28,11 +71,19 @@ regex_t *preg; if (g->strip != NULL) free((char *)g->strip); - if (g->sets != NULL) + if (g->sets != NULL) { + for (i = 0; i < g->ncsets; i++) { + free(g->sets[i].ranges); + free(g->sets[i].wides); + free(g->sets[i].types); + } free((char *)g->sets); - if (g->setbits != NULL) - free((char *)g->setbits); + } if (g->must != NULL) free(g->must); + if (g->charjump != NULL) + free(&g->charjump[CHAR_MIN]); + if (g->matchjump != NULL) + free(g->matchjump); free((char *)g); } |