Back to index

glibc  2.9
Functions
rpmatch.c File Reference
#include <langinfo.h>
#include <stdlib.h>
#include <regex.h>

Go to the source code of this file.

Functions

int rpmatch (char *response) const

Function Documentation

int rpmatch ( char *  response) const

Definition at line 27 of file rpmatch.c.

{
  /* Match against one of the response patterns, compiling the pattern
     first if necessary.  */
  auto int try (const int tag, const int match, const int nomatch,
              const char **lastp, regex_t *re);

  int try (const int tag, const int match, const int nomatch,
          const char **lastp, regex_t *re)
    {
      const char *pattern = nl_langinfo (tag);
      if (pattern != *lastp)
       {
         /* The pattern has changed.  */
         if (*lastp)
           {
             /* Free the old compiled pattern.  */
             __regfree (re);
             *lastp = NULL;
           }
         /* Compile the pattern and cache it for future runs.  */
         if (__regcomp (re, pattern, REG_EXTENDED) != 0)
           return -1;
         *lastp = pattern;
       }

      /* Try the pattern.  */
      return __regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
    }

  /* We cache the response patterns and compiled regexps here.  */
  static const char *yesexpr, *noexpr;
  static regex_t yesre, nore;

  return (try (YESEXPR, 1, 0, &yesexpr, &yesre) ?:
         try (NOEXPR, 0, -1, &noexpr, &nore));
}

Here is the call graph for this function:

Here is the caller graph for this function: