annotate lib/rpmatch.c @ 1404:96a4586772e8

Change guard on <regex.h> inclusion to use new symbol `! HAVE_LIBC_REGEX' defined in m4/regex.m4.
author Jim Meyering <jim@meyering.net>
date Sat, 04 Jul 1998 00:15:37 +0000
parents 43308e6073b6
children 317224592ba9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
882
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
1 /* Determine whether string value is affirmation or negative response
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
2 according to current locale's data.
1404
96a4586772e8 Change guard on <regex.h> inclusion to use new
Jim Meyering <jim@meyering.net>
parents: 882
diff changeset
3 Copyright (C) 1996, 1998 Free Software Foundation, Inc.
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
4
882
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
5 This program is free software; you can redistribute it and/or modify
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
6 it under the terms of the GNU General Public License as published by
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
7 the Free Software Foundation; either version 2, or (at your option)
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
8 any later version.
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9
882
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
10 This program is distributed in the hope that it will be useful,
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
13 GNU General Public License for more details.
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
14
882
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
15 You should have received a copy of the GNU General Public License
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
16 along with this program; if not, write to the Free Software Foundation,
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
17 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
18
882
43308e6073b6 libitize
Jim Meyering <jim@meyering.net>
parents: 722
diff changeset
19 #if HAVE_CONFIG_H
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 # include <config.h>
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 #endif
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
23 #if STDC_HEADERS || _LIBC
685
d5a36bb662b1 Make sure NULL is defined by including stddef.h
Jim Meyering <jim@meyering.net>
parents: 682
diff changeset
24 # include <stddef.h>
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
25 # include <stdlib.h>
685
d5a36bb662b1 Make sure NULL is defined by including stddef.h
Jim Meyering <jim@meyering.net>
parents: 682
diff changeset
26 #else
d5a36bb662b1 Make sure NULL is defined by including stddef.h
Jim Meyering <jim@meyering.net>
parents: 682
diff changeset
27 # ifndef NULL
d5a36bb662b1 Make sure NULL is defined by including stddef.h
Jim Meyering <jim@meyering.net>
parents: 682
diff changeset
28 # define NULL 0
d5a36bb662b1 Make sure NULL is defined by including stddef.h
Jim Meyering <jim@meyering.net>
parents: 682
diff changeset
29 # endif
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
30 #endif
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
31
685
d5a36bb662b1 Make sure NULL is defined by including stddef.h
Jim Meyering <jim@meyering.net>
parents: 682
diff changeset
32 #include <sys/types.h>
1404
96a4586772e8 Change guard on <regex.h> inclusion to use new
Jim Meyering <jim@meyering.net>
parents: 882
diff changeset
33 #if ! HAVE_LIBC_REGEX
722
f8be7fd6ff86 [!WITH_REGEX]: Include rx.h.
Jim Meyering <jim@meyering.net>
parents: 685
diff changeset
34 # include <regex.h>
f8be7fd6ff86 [!WITH_REGEX]: Include rx.h.
Jim Meyering <jim@meyering.net>
parents: 685
diff changeset
35 #endif
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36
681
c952aa1385fd (ENABLE_NLS): Include libintl.h and define _ to gettext.
Jim Meyering <jim@meyering.net>
parents: 667
diff changeset
37 #if ENABLE_NLS
c952aa1385fd (ENABLE_NLS): Include libintl.h and define _ to gettext.
Jim Meyering <jim@meyering.net>
parents: 667
diff changeset
38 # include <libintl.h>
c952aa1385fd (ENABLE_NLS): Include libintl.h and define _ to gettext.
Jim Meyering <jim@meyering.net>
parents: 667
diff changeset
39 # define _(Text) gettext (Text)
c952aa1385fd (ENABLE_NLS): Include libintl.h and define _ to gettext.
Jim Meyering <jim@meyering.net>
parents: 667
diff changeset
40 #else
c952aa1385fd (ENABLE_NLS): Include libintl.h and define _ to gettext.
Jim Meyering <jim@meyering.net>
parents: 667
diff changeset
41 # define _(Text) Text
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
42 #endif
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 static int
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
45 try (response, pattern, match, nomatch, lastp, re)
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
46 const char *response;
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 const char *pattern;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 const int match;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 const int nomatch;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 const char **lastp;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 regex_t *re;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 if (pattern != *lastp)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55 /* The pattern has changed. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 if (*lastp)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 /* Free the old compiled pattern. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 regfree (re);
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 *lastp = NULL;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 }
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62 /* Compile the pattern and cache it for future runs. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 if (regcomp (re, pattern, REG_EXTENDED) != 0)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 return -1;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 *lastp = pattern;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 }
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
68 /* See if the regular expression matches RESPONSE. */
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69 return regexec (re, response, 0, NULL, 0) == 0 ? match : nomatch;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 }
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 int
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 rpmatch (response)
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 const char *response;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 {
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 /* Match against one of the response patterns, compiling the pattern
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78 first if necessary. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80 /* We cache the response patterns and compiled regexps here. */
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81 static const char *yesexpr, *noexpr;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 static regex_t yesre, nore;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 int result;
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84
682
8356321f3b4c this conforms to POSIX.2. From Paul Eggert <eggert@twinsun.com>.
Jim Meyering <jim@meyering.net>
parents: 681
diff changeset
85 return ((result = try (response, _("^[yY]"), 1, 0,
665
724b81f1f93a [STDC_HEADERS]: Guard inclusion of stdlib.h.
Jim Meyering <jim@meyering.net>
parents: 662
diff changeset
86 &yesexpr, &yesre))
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 ? result
682
8356321f3b4c this conforms to POSIX.2. From Paul Eggert <eggert@twinsun.com>.
Jim Meyering <jim@meyering.net>
parents: 681
diff changeset
88 : try (response, _("^[nN]"), 0, -1, &noexpr, &nore));
662
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 }