1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-01 10:06:57 +03:00

Don't use a nested function in rpmatch.

This commit is contained in:
Roland McGrath
2014-09-12 14:58:55 -07:00
parent ba90e05052
commit c079afb772
2 changed files with 33 additions and 30 deletions

View File

@ -1,3 +1,8 @@
2014-09-12 Roland McGrath <roland@hack.frob.com>
* stdlib/rpmatch.c (try): New function, broken out of ...
(rpmatch): ... local function here. Also, prototypify definition.
2014-09-12 Joseph Myers <joseph@codesourcery.com> 2014-09-12 Joseph Myers <joseph@codesourcery.com>
* scripts/soversions.awk: Do not handle configuration names. * scripts/soversions.awk: Do not handle configuration names.

View File

@ -22,23 +22,18 @@
#include <regex.h> #include <regex.h>
int
rpmatch (response)
const char *response;
{
/* Match against one of the response patterns, compiling the pattern /* Match against one of the response patterns, compiling the pattern
first if necessary. */ first if necessary. */
auto int try (const int tag, const int match, const int nomatch, static int
const char **lastp, regex_t *re); try (const char *response,
const int tag, const int match, const int nomatch,
int try (const int tag, const int match, const int nomatch,
const char **lastp, regex_t *re) const char **lastp, regex_t *re)
{ {
const char *pattern = nl_langinfo (tag); const char *pattern = nl_langinfo (tag);
if (pattern != *lastp) if (pattern != *lastp)
{ {
/* The pattern has changed. */ /* The pattern has changed. */
if (*lastp) if (*lastp != NULL)
{ {
/* Free the old compiled pattern. */ /* Free the old compiled pattern. */
__regfree (re); __regfree (re);
@ -54,10 +49,13 @@ rpmatch (response)
return __regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch; return __regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
} }
int
rpmatch (const char *response)
{
/* We cache the response patterns and compiled regexps here. */ /* We cache the response patterns and compiled regexps here. */
static const char *yesexpr, *noexpr; static const char *yesexpr, *noexpr;
static regex_t yesre, nore; static regex_t yesre, nore;
return (try (YESEXPR, 1, 0, &yesexpr, &yesre) ?: return (try (response, YESEXPR, 1, 0, &yesexpr, &yesre) ?:
try (NOEXPR, 0, -1, &noexpr, &nore)); try (response, NOEXPR, 0, -1, &noexpr, &nore));
} }