/* yesno.c -- read a yes/no response from stdin
- Copyright (C) 1990 Free Software Foundation, Inc.
+
+ Copyright (C) 1990, 1998, 2001, 2003, 2004, 2005, 2006 Free
+ Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+ along with this program; if not, write to the Free Software Foundation,
+ Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
+
+#include <config.h>
+
+#include "yesno.h"
+#include <stdlib.h>
#include <stdio.h>
-/* Read one line from standard input
- and return nonzero if that line begins with y or Y,
- otherwise return 0. */
+#include "getline.h"
-int
-yesno ()
-{
- int c;
- int rv;
+/* Return true if we read an affirmative line from standard input. */
- fflush (stderr);
- c = getchar ();
- rv = (c == 'y') || (c == 'Y');
- while (c != EOF && c != '\n')
- c = getchar ();
+extern int rpmatch (char const *response);
- return rv;
+bool
+yesno (void)
+{
+ char *response = NULL;
+ size_t response_size = 0;
+ ssize_t response_len = getline (&response, &response_size, stdin);
+ bool yes;
+
+ if (response_len <= 0)
+ yes = false;
+ else
+ {
+ response[response_len - 1] = '\0';
+ yes = (0 < rpmatch (response));
+ }
+
+ free (response);
+ return yes;
}