about summary refs log tree commit diff
path: root/misc/regexp.c
blob: ee7d572111cd3c6b95166eab25e4a78d05761150 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/* Define function and variables for the obsolete <regexp.h> interface.
   Copyright (C) 1996-2015 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.

   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.

   The GNU C Library 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
   Lesser General Public License for more details.

   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, see
   <http://www.gnu.org/licenses/>.  */

/* We don't include regexp.h here because of the macros it requires, and
   because it now contains an unconditional #warning.  */

#include <regex.h>

/* Define the variables used for the interface.  */
char *loc1;
char *loc2;

/* Although we do not support the use we define this variable as well.  */
char *locs;


/* Find the next match in STRING.  The compiled regular expression is
   found in the buffer starting at EXPBUF.  `loc1' will return the
   first character matched and `loc2' points to the next unmatched
   character.  */
int
__step (const char *string, const char *expbuf)
{
  regmatch_t match;	/* We only need info about the full match.  */

  expbuf += __alignof (regex_t *);
  expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);

  if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
      == REG_NOMATCH)
    return 0;

  loc1 = (char *) string + match.rm_so;
  loc2 = (char *) string + match.rm_eo;
  return 1;
}
weak_alias (__step, step)


/* Match the beginning of STRING with the compiled regular expression
   in EXPBUF.  If the match is successful `loc2' will contain the
   position of the first unmatched character.  */
int
__advance (const char *string, const char *expbuf)
{
  regmatch_t match;	/* We only need info about the full match.  */

  expbuf += __alignof__ (regex_t *);
  expbuf -= (expbuf - ((const char *) 0)) % __alignof__ (regex_t *);

  if (__regexec ((const regex_t *) expbuf, string, 1, &match, REG_NOTEOL)
      == REG_NOMATCH
      /* We have to check whether the check is at the beginning of the
	 buffer.  */
      || match.rm_so != 0)
    return 0;

  loc2 = (char *) string + match.rm_eo;
  return 1;
}
weak_alias (__advance, advance)