Add --no-warn.

This commit is contained in:
Lasse Collin 2009-05-22 14:43:00 +03:00
parent b4f92f522d
commit b60376249e
4 changed files with 34 additions and 1 deletions

View File

@ -46,7 +46,8 @@ parse_real(args_info *args, int argc, char **argv)
OPT_FILES0,
};
static const char short_opts[] = "cC:defF:hHlkM:qrS:tT:vVz0123456789";
static const char short_opts[]
= "cC:defF:hHlkM:qQrS:tT:vVz0123456789";
static const struct option long_opts[] = {
// Operation mode
@ -94,6 +95,7 @@ parse_real(args_info *args, int argc, char **argv)
// Other options
{ "quiet", no_argument, NULL, 'q' },
{ "verbose", no_argument, NULL, 'v' },
{ "no-warn", no_argument, NULL, 'Q' },
{ "help", no_argument, NULL, 'h' },
{ "long-help", no_argument, NULL, 'H' },
{ "version", no_argument, NULL, 'V' },
@ -195,6 +197,10 @@ parse_real(args_info *args, int argc, char **argv)
message_verbosity_decrease();
break;
case 'Q':
set_exit_no_warn();
break;
case 't':
opt_mode = MODE_TEST;
break;

View File

@ -17,6 +17,10 @@
/// Exit status to use. This can be changed with set_exit_status().
static enum exit_status_type exit_status = E_SUCCESS;
/// True if --no-warn is specified. When this is true, we don't set
/// the exit status to E_WARNING when something worth a warning happens.
static bool no_warn = false;
extern void
set_exit_status(enum exit_status_type new_status)
@ -30,6 +34,14 @@ set_exit_status(enum exit_status_type new_status)
}
extern void
set_exit_no_warn(void)
{
no_warn = true;
return;
}
extern void
my_exit(enum exit_status_type status)
{
@ -59,6 +71,11 @@ my_exit(enum exit_status_type status)
status = E_ERROR;
}
// Suppress the exit status indicating a warning if --no-warn
// was specified.
if (status == E_WARNING && no_warn)
status = E_SUCCESS;
// If we have got a signal, raise it to kill the program.
// Otherwise we just call exit().
signals_exit();

View File

@ -24,6 +24,12 @@ enum exit_status_type {
extern void set_exit_status(enum exit_status_type new_status);
/// Use E_SUCCESS instead of E_WARNING if something worth a warning occurs
/// but nothing worth an error has occurred. This is called when --no-warn
/// is specified.
extern void set_exit_no_warn(void);
/// Exits the program using the given status. This takes care of closing
/// stdin, stdout, and stderr and catches possible errors. If we had got
/// a signal, this function will raise it so that to the parent process it

View File

@ -1133,6 +1133,10 @@ message_help(bool long_help)
" -q, --quiet suppress warnings; specify twice to suppress errors too\n"
" -v, --verbose be verbose; specify twice for even more verbose"));
if (long_help)
puts(_(
" -Q, --no-warn make warnings not affect the exit status"));
if (long_help)
puts(_(
"\n"