X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fyesno.c;h=54691b7ff999fdc5b348233e487d28d70e4523ab;hb=c73a1f614a21ffe15424c52ecade7556174a071e;hp=a705da732e2d4e7453099de05155f5bd142c66c0;hpb=d87c39464604e74f580c7fae835be31a4c125c36;p=gnulib.git diff --git a/lib/yesno.c b/lib/yesno.c index a705da732..54691b7ff 100644 --- a/lib/yesno.c +++ b/lib/yesno.c @@ -1,5 +1,5 @@ /* yesno.c -- read a yes/no response from stdin - Copyright (C) 1990 Free Software Foundation, Inc. + Copyright (C) 1990, 1998, 2001, 2003, 2004 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 @@ -12,26 +12,45 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +#if HAVE_CONFIG_H +# include +#endif + +#include "yesno.h" + +#include +#include #include +#if USE_UNLOCKED_IO +# include "unlocked-io.h" +#endif + /* Read one line from standard input and return nonzero if that line begins with y or Y, otherwise return 0. */ -int -yesno () +extern int rpmatch (char const *response); + +bool +yesno (void) { + /* We make some assumptions here: + a) leading white space in the response are not vital + b) the first 128 characters of the answer are enough (the rest can + be ignored) + I cannot think for a situation where this is not ok. --drepper@gnu */ + char buf[128]; + int len = 0; int c; - int rv; - fflush (stderr); - c = getchar (); - rv = (c == 'y') || (c == 'Y'); - while (c != EOF && c != '\n') - c = getchar (); + while ((c = getchar ()) != EOF && c != '\n') + if ((len > 0 && len < 127) || (len == 0 && !isspace (c))) + buf[len++] = c; + buf[len] = '\0'; - return rv; + return rpmatch (buf) == 1; }