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/re_comp.c 205146 2010-03-14 10:18:58Z ed $");
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 <regex.h>
48#include <stddef.h>
49#include <unistd.h>
50
51static regex_t re_regexp;
52static int re_gotexp;
53static char re_errstr[100];
54
55char *
56re_comp(const char *s)
57{
58 int rc;
59
60 if (s == NULL || *s == '\0') {
61 if (!re_gotexp)
62 return __DECONST(char *,
63 "no previous regular expression");
64 return (NULL);
65 }
66
67 if (re_gotexp) {
68 regfree(&re_regexp);
69 re_gotexp = 0;
70 }
71
72 rc = regcomp(&re_regexp, s, REG_EXTENDED);
73 if (rc == 0) {
74 re_gotexp = 1;
75 return (NULL);
76 }
77
78 regerror(rc, &re_regexp, re_errstr, sizeof(re_errstr));
79 re_errstr[sizeof(re_errstr) - 1] = '\0';
80 return (re_errstr);
81}
82
83int
84re_exec(const char *s)
85{
86 int rc;
87
88 if (!re_gotexp)
89 return (-1);
90 rc = regexec(&re_regexp, s, 0, NULL, 0);
91 return (rc == 0 ? 1 : 0);
92}