Change copyright notice from GPLv2+ to GPLv3+.
[gnulib.git] / lib / yesno.c
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 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   int c = getchar ();
57   yes = (c == 'y' || c == 'Y');
58   while (c != '\n' && c != EOF)
59     c = getchar ();
60 #endif
61
62   return yes;
63 }