1a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner/* Test for the STOP parameter of re_match_2 and re_search_2.
2a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   Copyright (C) 2002 Free Software Foundation, Inc.
3a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   This file is part of the GNU C Library.
4a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   Contributed by Stepan Kasal <kasal@math.cas.cz>, 2002.
5a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
6a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   The GNU C Library is free software; you can redistribute it and/or
7a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   modify it under the terms of the GNU Lesser General Public
8a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   License as published by the Free Software Foundation; either
9a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   version 2.1 of the License, or (at your option) any later version.
10a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
11a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   The GNU C Library is distributed in the hope that it will be useful,
12a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   but WITHOUT ANY WARRANTY; without even the implied warranty of
13a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   Lesser General Public License for more details.
15a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
16a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   You should have received a copy of the GNU Lesser General Public
17a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   License along with the GNU C Library; if not, write to the Free
18a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner   02110-1301 USA.  */
20a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
21a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#ifdef HAVE_CONFIG_H
22a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include "config.h"
23a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#endif
24a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
25a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <locale.h>
26a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <stdio.h>
27a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <stdlib.h>
28a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <string.h>
29a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <sys/types.h>
30a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner#include <regex.h>
31a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
32a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
33a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turnerint
34a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turnermain (void)
35a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner{
36a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  struct re_pattern_buffer regex;
37a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  const char *s;
38a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  int match[4];
39a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
40a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  memset (&regex, '\0', sizeof (regex));
41a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
42a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  s = re_compile_pattern ("xy$", 3, &regex);
43a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  if (s != NULL)
44a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    {
45a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      puts ("failed to compile pattern \"xy$\"");
46a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      return 1;
47a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    }
48a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  else
49a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    match[0] = re_match_2(&regex,"xyz",3,NULL,0,0,NULL,2);
50a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
51a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  free (regex.buffer);
52a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  memset (&regex, '\0', sizeof (regex));
53a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
54a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  s = re_compile_pattern ("xy\\>", 4, &regex);
55a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  if (s != NULL)
56a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    {
57a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      puts ("failed to compile pattern \"xy\\>\"");
58a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      return 1;
59a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    }
60a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  else
61a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    match[1] = re_search_2(&regex,"xyz",3,NULL,0,0,2,NULL,2);
62a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
63a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  free (regex.buffer);
64a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  memset (&regex, '\0', sizeof (regex));
65a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
66a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  s = re_compile_pattern ("xy \\<", 5, &regex);
67a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  if (s != NULL)
68a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    {
69a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      puts ("failed to compile pattern \"xy \\<\"");
70a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      return 1;
71a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    }
72a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  else
73a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    {
74a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      match[2] = re_match_2(&regex,"xy  ",4,NULL,0,0,NULL,3);
75a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      match[3] = re_match_2(&regex,"xy z",4,NULL,0,0,NULL,3);
76a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    }
77a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
78a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  if (match[0] != -1 || match[1] != -1 || match[2] != -1 || match[3] != 3)
79a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    {
80a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      printf ("re_{match,search}_2 returned %d,%d,%d,%d, expected -1,-1,-1,3\n",
81a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner		match[0], match[1], match[2], match[3]);
82a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner      return 1;
83a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner    }
84a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
85a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  puts (" -> OK");
86a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner
87a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner  return 0;
88a6dfe5f70959a596290e1591579d26a288a1a2f9David 'Digit' Turner}
89