/* -*-c-*-
*
- * $Id: regexp.c,v 1.1 2002/08/11 12:58:09 mdw Exp $
- *
* Matches regular expressions
*
* (c) 2002 Mark Wooding
*/
-/*----- Licensing notice --------------------------------------------------*
+/*----- Licensing notice --------------------------------------------------*
*
* This file is part of Anag: a simple wordgame helper.
*
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
- *
+ *
* Anag is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
- *
+ *
* You should have received a copy of the GNU General Public License
* along with Anag; if not, write to the Free Software Foundation,
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: regexp.c,v $
- * Revision 1.1 2002/08/11 12:58:09 mdw
- * Added support for regular expression matching, if supported by the C
- * library.
- *
- * Revision 1.1 2001/02/04 17:14:42 mdw
- * Initial checkin
- *
- */
-
/*----- Header files ------------------------------------------------------*/
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
-#ifndef HAVE_REGCOMP
- extern int dummy;
-#else
-
#include "anag.h"
+
#include <regex.h>
/*----- Data structures ---------------------------------------------------*/
static int n_regexp(node *nn, const char *p, size_t sz)
{
node_regexp *n = (node_regexp *)nn;
+ char buf[256];
int e;
switch (e = regexec(&n->rx, p, 0, 0, 0)) {
- case 0:
- return 1;
- case REG_NOMATCH:
- return 0;
- default: {
- char buf[256];
+ case 0: return 1;
+ case REG_NOMATCH: return 0;
+ default:
regerror(e, &n->rx, buf, sizeof(buf));
die("error matching regexp `%s' against `%s': %s",
n->s, p, buf);
- } break;
+ break;
}
return (0);
}
node *regexp(const char *const *av)
{
node_regexp *n = xmalloc(sizeof(*n));
+ char buf[256];
int e;
+
n->n.func = n_regexp;
if ((e = regcomp(&n->rx, av[0],
REG_EXTENDED | REG_ICASE | REG_NOSUB)) != 0) {
- char buf[256];
regerror(e, &n->rx, buf, sizeof(buf));
die("bad regular expression `%s': %s", av[0], buf);
}
}
/*----- That's all, folks -------------------------------------------------*/
-
-#endif