|
|
|
@@ -1,53 +1,37 @@
|
|
|
|
|
/*
|
|
|
|
|
* regfree - free an RE
|
|
|
|
|
*
|
|
|
|
|
* Copyright (c) 1998, 1999 Henry Spencer. All rights reserved.
|
|
|
|
|
*
|
|
|
|
|
* Development of this software was funded, in part, by Cray Research Inc.,
|
|
|
|
|
* UUNET Communications Services Inc., Sun Microsystems Inc., and Scriptics
|
|
|
|
|
* Corporation, none of whom are responsible for the results. The author
|
|
|
|
|
* thanks all of them.
|
|
|
|
|
*
|
|
|
|
|
* Redistribution and use in source and binary forms -- with or without
|
|
|
|
|
* modification -- are permitted for any purpose, provided that
|
|
|
|
|
* redistributions in source form retain this entire copyright notice and
|
|
|
|
|
* indicate the origin and nature of any modifications.
|
|
|
|
|
*
|
|
|
|
|
* I'd appreciate being given credit for this package in the documentation
|
|
|
|
|
* of software which uses it, but that is not a requirement.
|
|
|
|
|
*
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED ``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
|
|
|
|
|
* HENRY SPENCER 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.
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
* You might think that this could be incorporated into regcomp.c, and
|
|
|
|
|
* that would be a reasonable idea... except that this is a generic
|
|
|
|
|
* function (with a generic name), applicable to all compiled REs
|
|
|
|
|
* regardless of the size of their characters, whereas the stuff in
|
|
|
|
|
* regcomp.c gets compiled once per character size.
|
|
|
|
|
*/
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include "regex.h"
|
|
|
|
|
|
|
|
|
|
#include "regguts.h"
|
|
|
|
|
#include "utils.h"
|
|
|
|
|
#include "regex2.h"
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
- regfree - free an RE (generic function, punts to RE-specific function)
|
|
|
|
|
*
|
|
|
|
|
* Ignoring invocation with NULL is a convenience.
|
|
|
|
|
- regfree - free everything
|
|
|
|
|
= extern void regfree(regex_t *);
|
|
|
|
|
*/
|
|
|
|
|
VOID
|
|
|
|
|
regfree(re)
|
|
|
|
|
regex_t *re;
|
|
|
|
|
void
|
|
|
|
|
regfree(preg)
|
|
|
|
|
regex_t *preg;
|
|
|
|
|
{
|
|
|
|
|
if (re == NULL)
|
|
|
|
|
register struct re_guts *g;
|
|
|
|
|
|
|
|
|
|
if (preg->re_magic != MAGIC1) /* oops */
|
|
|
|
|
return; /* nice to complain, but hard */
|
|
|
|
|
|
|
|
|
|
g = preg->re_g;
|
|
|
|
|
if (g == NULL || g->magic != MAGIC2) /* oops again */
|
|
|
|
|
return;
|
|
|
|
|
(*((struct fns *)re->re_fns)->free)(re);
|
|
|
|
|
preg->re_magic = 0; /* mark it invalid */
|
|
|
|
|
g->magic = 0; /* mark it invalid */
|
|
|
|
|
|
|
|
|
|
if (g->strip != NULL)
|
|
|
|
|
free((char *)g->strip);
|
|
|
|
|
if (g->sets != NULL)
|
|
|
|
|
free((char *)g->sets);
|
|
|
|
|
if (g->setbits != NULL)
|
|
|
|
|
free((char *)g->setbits);
|
|
|
|
|
if (g->must != NULL)
|
|
|
|
|
free(g->must);
|
|
|
|
|
free((char *)g);
|
|
|
|
|
}
|
|
|
|
|