rpmatch — determine if the answer to a question is affirmative or negative
#include <stdlib.h>
int
rpmatch( |
const char * | response) ; |
Note | |||
---|---|---|---|
|
rpmatch
() 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 environment 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
negative.
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.
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 nonzero.
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 anywhere else, but indicates a
failure of the regex engine (but this case is
indistinguishable from that of an unrecognized value of
response
).
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)$
.
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); }
This page is part of release 2.79 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/.
Copyright (C) 2006 Justin Pryzby <pryzbyjjustinpryzby.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. References: glibc manual and source 2006-05-19, mtk, various edits and example program |