RPMATCH(3) Linux Programmer's Manual RPMATCH(3)NAMErpmatch - determine if the answer to a question is affirmative or nega‐
tive
SYNOPSIS
#include <stdlib.h>
int rpmatch(const char *response);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
rpmatch(): _SVID_SOURCE
DESCRIPTIONrpmatch() handles a user response to yes or no questions, with support
for internationalization.
response should be a null-terminated string containing a user-supplied
response, perhaps obtained with fgets(3) or getline(3).
The user's language preference is taken into account per the environ‐
ment variables LANG, LC_MESSAGES, and LC_ALL, if the program has called
setlocale(3) to effect their changes.
Regardless of the locale, responses matching ^[Yy] are always accepted
as affirmative, and those matching ^[Nn] are always accepted as nega‐
tive.
RETURN VALUE
After examining response, rpmatch() returns 0 for a recognized negative
response ("no"), 1 for a recognized positive response ("yes"), and -1
when the value of response is unrecognized.
ERRORS
A return value of -1 may indicate either an invalid input, or some
other error. It is incorrect to only test if the return value is non-
zero.
rpmatch() can fail for any of the reasons that regcomp(3) or regexec(3)
can fail; the cause of the error is not available from errno or any‐
where else, but indicates a failure of the regex engine (but this case
is indistinguishable from that of an unrecognized value of response).
CONFORMING TOrpmatch() is not required by any standard, but is available on a few
other systems.
BUGS
The rpmatch() implementation looks at only the first character of
response. As a consequence, "nyes" returns 0, and "ynever; not in a
million years" returns 1. It would be preferable to accept input
strings much more strictly, for example (using the extended regular
expression notation described in regex(7)): ^([yY]|yes|YES)$ and
^([nN]|no|NO)$.
EXAMPLE
The following program displays the results when rpmatch() is applied to
the string given in the program's command-line argument.
#define _SVID_SOURCE
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int
main(int argc, char *argv[])
{
if (argc != 2 || strcmp(argv[1], "--help") == 0) {
fprintf(stderr, "%s response\n", argv[0]);
exit(EXIT_FAILURE);
}
setlocale(LC_ALL, "");
printf("rpmatch() returns: %d\n", rpmatch(argv[1]));
exit(EXIT_SUCCESS);
}
SEE ALSOfgets(3), getline(3), nl_langinfo(3), regcomp(3), setlocale(3)COLOPHON
This page is part of release 3.15 of the Linux man-pages project. A
description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
GNU 2007-07-26 RPMATCH(3)