expl: Work around inaccurate implementation on NetBSD.
[gnulib.git] / tests / dfa-match-aux.c
blob71cea8e066adb812558e20825084e8e133f3eea8
1 /* Auxiliary program to test a DFA code path that cannot be triggered
2 by grep or gawk.
3 Copyright 2014-2019 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3, or (at your option)
8 any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
18 02110-1301, USA. */
20 #include <config.h>
21 #include <locale.h>
22 #include <stdio.h>
23 #include <stdlib.h>
24 #include <string.h>
25 #include <regex.h>
26 #include <dfa.h>
27 #include <localeinfo.h>
29 #include "getprogname.h"
31 _Noreturn void
32 dfaerror (char const *mesg)
34 printf ("dfaerror: %s\n", mesg);
35 exit (EXIT_FAILURE);
38 _Noreturn void
39 dfawarn (char const *mesg)
41 printf ("dfawarn: %s\n", mesg);
42 exit (EXIT_FAILURE);
45 int
46 main (int argc, char **argv)
48 struct dfa *dfa;
49 char *beg, *end, *p;
50 int allow_nl;
51 struct localeinfo localeinfo;
53 if (argc < 3)
54 exit (EXIT_FAILURE);
56 setlocale (LC_ALL, "");
57 init_localeinfo (&localeinfo);
59 dfa = dfaalloc ();
60 dfasyntax (dfa, &localeinfo, RE_SYNTAX_GREP | RE_NO_EMPTY_RANGES, 0);
61 dfacomp (argv[1], strlen (argv[1]), dfa, 0);
63 beg = argv[2];
64 end = argv[2] + strlen (argv[2]);
65 allow_nl = argc > 3 && atoi (argv[3]);
67 p = dfaexec (dfa, beg, end, allow_nl, NULL, NULL);
69 if (p != NULL)
70 printf ("%zd\n", p - beg);
72 exit (EXIT_SUCCESS);