Line data Source code
1 : /* yesno.c -- read a yes/no response from stdin
2 :
3 : Copyright (C) 1990, 1998, 2001, 2003, 2004, 2005, 2006, 2007 Free
4 : Software Foundation, Inc.
5 :
6 : This program is free software: you can redistribute it and/or modify
7 : it under the terms of the GNU General Public License as published by
8 : the Free Software Foundation; either version 3 of the License, or
9 : (at your option) any later version.
10 :
11 : This program is distributed in the hope that it will be useful,
12 : but WITHOUT ANY WARRANTY; without even the implied warranty of
13 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 : GNU General Public License for more details.
15 :
16 : You should have received a copy of the GNU General Public License
17 : along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 :
19 : #include <config.h>
20 :
21 : #include "yesno.h"
22 :
23 : #include <stdlib.h>
24 : #include <stdio.h>
25 :
26 : extern int rpmatch (char const *response);
27 :
28 : /* Return true if we read an affirmative line from standard input.
29 :
30 : Since this function uses stdin, it is suggested that the caller not
31 : use STDIN_FILENO directly, and also that the line
32 : atexit(close_stdin) be added to main(). */
33 :
34 : bool
35 13 : yesno (void)
36 : {
37 : bool yes;
38 :
39 : #if ENABLE_NLS
40 : char *response = NULL;
41 : size_t response_size = 0;
42 : ssize_t response_len = getline (&response, &response_size, stdin);
43 :
44 : if (response_len <= 0)
45 : yes = false;
46 : else
47 : {
48 : response[response_len - 1] = '\0';
49 : yes = (0 < rpmatch (response));
50 : }
51 :
52 : free (response);
53 : #else
54 : /* Test against "^[yY]", hardcoded to avoid requiring getline,
55 : regex, and rpmatch. */
56 13 : int c = getchar ();
57 13 : yes = (c == 'y' || c == 'Y');
58 36 : while (c != '\n' && c != EOF)
59 10 : c = getchar ();
60 : #endif
61 :
62 13 : return yes;
63 : }
|