Deleted Added
full compact
34c34
< __FBSDID("$FreeBSD: head/lib/libcompat/4.3/regex.c 194793 2009-06-23 23:20:09Z delphij $");
---
> __FBSDID("$FreeBSD: head/lib/libcompat/4.3/re_comp.c 205146 2010-03-14 10:18:58Z ed $");
47c47
< #include <sys/types.h>
---
> #include <regex.h>
49,52c49
< #include <regexp.h>
< #include <string.h>
< #include <stdlib.h>
< #include <string.h>
---
> #include <unistd.h>
54,56c51,53
< static regexp *re_regexp;
< static int re_goterr;
< static char *re_errstr;
---
> static regex_t re_regexp;
> static int re_gotexp;
> static char re_errstr[100];
59c56
< re_comp(char *s)
---
> re_comp(const char *s)
60a58,59
> int rc;
>
62,63c61,63
< if (re_regexp == NULL)
< return "no previous regular expression";
---
> if (!re_gotexp)
> return __DECONST(char *,
> "no previous regular expression");
66,72c66,80
< if (re_regexp)
< free(re_regexp);
< if (re_errstr)
< free(re_errstr);
< re_goterr = 0;
< re_regexp = regcomp(s);
< return (re_goterr ? re_errstr : NULL);
---
>
> if (re_gotexp) {
> regfree(&re_regexp);
> re_gotexp = 0;
> }
>
> rc = regcomp(&re_regexp, s, REG_EXTENDED);
> if (rc == 0) {
> re_gotexp = 1;
> return (NULL);
> }
>
> regerror(rc, &re_regexp, re_errstr, sizeof(re_errstr));
> re_errstr[sizeof(re_errstr) - 1] = '\0';
> return (re_errstr);
76c84
< re_exec(char *s)
---
> re_exec(const char *s)
80,82c88,91
< re_goterr = 0;
< rc = regexec(re_regexp, s);
< return (re_goterr ? -1 : rc);
---
> if (!re_gotexp)
> return (-1);
> rc = regexec(&re_regexp, s, 0, NULL, 0);
> return (rc == 0 ? 1 : 0);
84,92d92
<
< void
< regerror(const char *s)
< {
< re_goterr = 1;
< if (re_errstr)
< free(re_errstr);
< re_errstr = strdup(s);
< }