LCOV - code coverage report
Current view: top level - common - yesno.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 72 0.0 %
Date: 2016-11-29 15:00:56 Functions: 0 4 0.0 %

          Line data    Source code
       1             : /* yesno.c - Yes/No questions
       2             :  * Copyright (C) 1998, 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
       3             :  *
       4             :  * This file is part of GnuPG.
       5             :  *
       6             :  * This file is free software; you can redistribute it and/or modify
       7             :  * it under the terms of either
       8             :  *
       9             :  *   - the GNU Lesser General Public License as published by the Free
      10             :  *     Software Foundation; either version 3 of the License, or (at
      11             :  *     your option) any later version.
      12             :  *
      13             :  * or
      14             :  *
      15             :  *   - the GNU General Public License as published by the Free
      16             :  *     Software Foundation; either version 2 of the License, or (at
      17             :  *     your option) any later version.
      18             :  *
      19             :  * or both in parallel, as here.
      20             :  *
      21             :  * This file is distributed in the hope that it will be useful,
      22             :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      23             :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      24             :  * GNU General Public License for more details.
      25             :  *
      26             :  * You should have received a copy of the GNU General Public License
      27             :  * along with this program; if not, see <https://www.gnu.org/licenses/>.
      28             :  */
      29             : 
      30             : #include <config.h>
      31             : #include <stdlib.h>
      32             : #include <errno.h>
      33             : 
      34             : #include "i18n.h"
      35             : #include "util.h"
      36             : 
      37             : 
      38             : /* Check the string S for a YES or NO answer and take care of
      39             :    localization.  If no valid string is given the value of DEF_ANSWER
      40             :    is returned.  Returns 1 for yes and 0 for no.  */
      41             : int
      42           0 : answer_is_yes_no_default (const char *s, int def_answer)
      43             : {
      44             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
      45           0 :   const char *long_yes = _("yes");
      46           0 :   const char *short_yes = _("yY");
      47             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
      48           0 :   const char *long_no = _("no");
      49           0 :   const char *short_no = _("nN");
      50             : 
      51             :   /* Note: we have to use the local dependent compare here. */
      52           0 :   if ( match_multistr(long_yes,s) )
      53           0 :     return 1;
      54           0 :   if ( *s && strchr( short_yes, *s ) && !s[1] )
      55           0 :     return 1;
      56             :   /* Test for "no" strings to catch ambiguities for the next test. */
      57           0 :   if ( match_multistr(long_no,s) )
      58           0 :     return 0;
      59           0 :   if ( *s && strchr( short_no, *s ) && !s[1] )
      60           0 :     return 0;
      61             :   /* Test for the english version (for those who are used to type yes). */
      62           0 :   if ( !ascii_strcasecmp(s, "yes" ) )
      63           0 :     return 1;
      64           0 :   if ( *s && strchr( "yY", *s ) && !s[1] )
      65           0 :     return 1;
      66           0 :   return def_answer;
      67             : }
      68             : 
      69             : int
      70           0 : answer_is_yes ( const char *s )
      71             : {
      72           0 :   return answer_is_yes_no_default(s,0);
      73             : }
      74             : 
      75             : /****************
      76             :  * Return 1 for yes, -1 for quit, or 0 for no
      77             :  */
      78             : int
      79           0 : answer_is_yes_no_quit ( const char *s )
      80             : {
      81             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
      82           0 :   const char *long_yes = _("yes");
      83             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
      84           0 :   const char *long_no = _("no");
      85             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
      86           0 :   const char *long_quit = _("quit");
      87           0 :   const char *short_yes = _("yY");
      88           0 :   const char *short_no = _("nN");
      89           0 :   const char *short_quit = _("qQ");
      90             : 
      91             :   /* Note: we have to use a local dependent compare here. */
      92           0 :   if ( match_multistr(long_no,s) )
      93           0 :     return 0;
      94           0 :   if ( match_multistr(long_yes,s) )
      95           0 :     return 1;
      96           0 :   if ( match_multistr(long_quit,s) )
      97           0 :     return -1;
      98           0 :   if ( *s && strchr( short_no, *s ) && !s[1] )
      99           0 :     return 0;
     100           0 :   if ( *s && strchr( short_yes, *s ) && !s[1] )
     101           0 :       return 1;
     102           0 :   if ( *s && strchr( short_quit, *s ) && !s[1] )
     103           0 :     return -1;
     104             :   /* but not here. */
     105           0 :   if ( !ascii_strcasecmp(s, "yes" ) )
     106           0 :     return 1;
     107           0 :   if ( !ascii_strcasecmp(s, "quit" ) )
     108           0 :       return -1;
     109           0 :   if ( *s && strchr( "yY", *s ) && !s[1] )
     110           0 :     return 1;
     111           0 :   if ( *s && strchr( "qQ", *s ) && !s[1] )
     112           0 :     return -1;
     113           0 :   return 0;
     114             : }
     115             : 
     116             : /*
     117             :    Return 1 for okay, 0 for for cancel or DEF_ANSWER for default.
     118             :  */
     119             : int
     120           0 : answer_is_okay_cancel (const char *s, int def_answer)
     121             : {
     122             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
     123           0 :   const char *long_okay = _("okay|okay");
     124             :   /* TRANSLATORS: See doc/TRANSLATE about this string. */
     125           0 :   const char *long_cancel = _("cancel|cancel");
     126           0 :   const char *short_okay = _("oO");
     127           0 :   const char *short_cancel = _("cC");
     128             : 
     129             :   /* Note: We have to use the locale dependent compare. */
     130           0 :   if ( match_multistr(long_okay,s) )
     131           0 :     return 1;
     132           0 :   if ( match_multistr(long_cancel,s) )
     133           0 :     return 0;
     134           0 :   if ( *s && strchr( short_okay, *s ) && !s[1] )
     135           0 :     return 1;
     136           0 :   if ( *s && strchr( short_cancel, *s ) && !s[1] )
     137           0 :     return 0;
     138             :   /* Always test for the English values (not locale here). */
     139           0 :   if ( !ascii_strcasecmp(s, "okay" ) )
     140           0 :     return 1;
     141           0 :   if ( !ascii_strcasecmp(s, "ok" ) )
     142           0 :     return 1;
     143           0 :   if ( !ascii_strcasecmp(s, "cancel" ) )
     144           0 :     return 0;
     145           0 :   if ( *s && strchr( "oO", *s ) && !s[1] )
     146           0 :     return 1;
     147           0 :   if ( *s && strchr( "cC", *s ) && !s[1] )
     148           0 :     return 0;
     149           0 :   return def_answer;
     150             : }

Generated by: LCOV version 1.11