Deleted Added
sdiff udiff text old ( 194793 ) new ( 205146 )
full compact
1/*-
2 * Copyright (c) 1992 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * James da Silva at the University of Maryland at College Park.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 17 unchanged lines hidden (view full) ---

26 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 * SUCH DAMAGE.
31 */
32
33#include <sys/cdefs.h>
34__FBSDID("$FreeBSD: head/lib/libcompat/4.3/regex.c 194793 2009-06-23 23:20:09Z delphij $");
35
36/*
37 * Compatibility routines that implement the old re_comp/re_exec interface in
38 * terms of the regcomp/regexec interface. It's possible that some programs
39 * rely on dark corners of re_comp/re_exec and won't work with this version,
40 * but most programs should be fine.
41 */
42
43#if defined(LIBC_SCCS) && !defined(lint)
44static char sccsid[] = "@(#)regex.c 5.1 (Berkeley) 3/29/92";
45#endif /* LIBC_SCCS and not lint */
46
47#include <sys/types.h>
48#include <stddef.h>
49#include <regexp.h>
50#include <string.h>
51#include <stdlib.h>
52#include <string.h>
53
54static regexp *re_regexp;
55static int re_goterr;
56static char *re_errstr;
57
58char *
59re_comp(char *s)
60{
61 if (s == NULL || *s == '\0') {
62 if (re_regexp == NULL)
63 return "no previous regular expression";
64 return (NULL);
65 }
66 if (re_regexp)
67 free(re_regexp);
68 if (re_errstr)
69 free(re_errstr);
70 re_goterr = 0;
71 re_regexp = regcomp(s);
72 return (re_goterr ? re_errstr : NULL);
73}
74
75int
76re_exec(char *s)
77{
78 int rc;
79
80 re_goterr = 0;
81 rc = regexec(re_regexp, s);
82 return (re_goterr ? -1 : rc);
83}
84
85void
86regerror(const char *s)
87{
88 re_goterr = 1;
89 if (re_errstr)
90 free(re_errstr);
91 re_errstr = strdup(s);
92}