File: sv_regexp_match.c.inc

package info (click to toggle)
libsyntax-operator-equ-perl 0.10-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 172 kB
  • sloc: perl: 352; pascal: 34; makefile: 3
file content (22 lines) | stat: -rw-r--r-- 698 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/* vi: set ft=c : */

#define sv_regexp_match(sv, rx)  S_sv_regexp_match(aTHX_ sv, rx)
static bool S_sv_regexp_match(pTHX_ SV *sv, REGEXP *rx)
{
  STRLEN len;
  /* These don't get modified, but CALLREGEXEC() doesn't take consts. */
  char *strbeg = SvPV(sv, len);
  char *strend = strbeg + len;

  STRLEN minlen = RX_MINLEN(rx);
  if(minlen && len < minlen)
    /* string is already shorter than the shortest possible match */
    return FALSE;

  /* Entirely unclear from docs what data or flags should be but in practice
   * it turns out that NULL/0 seems to work fine.
   * minend can just be 1.
   */
  I32 ret = CALLREGEXEC(rx, strbeg, strend, strbeg, 1, sv, NULL, 0);
  return (ret != 0);
}