Blame lib/xstrtol-error.c

Packit Service fdd496
/* A more useful interface to strtol.
Packit Service fdd496
Packit Service fdd496
   Copyright (C) 1995-1996, 1998-1999, 2001-2004, 2006-2017 Free Software
Packit Service fdd496
   Foundation, Inc.
Packit Service fdd496
Packit Service fdd496
   This program is free software: you can redistribute it and/or modify
Packit Service fdd496
   it under the terms of the GNU General Public License as published by
Packit Service fdd496
   the Free Software Foundation; either version 3 of the License, or
Packit Service fdd496
   (at your option) any later version.
Packit Service fdd496
Packit Service fdd496
   This program is distributed in the hope that it will be useful,
Packit Service fdd496
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service fdd496
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service fdd496
   GNU General Public License for more details.
Packit Service fdd496
Packit Service fdd496
   You should have received a copy of the GNU General Public License
Packit Service fdd496
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit Service fdd496
Packit Service fdd496
#include <config.h>
Packit Service fdd496
#include "xstrtol.h"
Packit Service fdd496
Packit Service fdd496
#include <stdlib.h>
Packit Service fdd496
Packit Service fdd496
#include "error.h"
Packit Service fdd496
#include "exitfail.h"
Packit Service fdd496
#include "gettext.h"
Packit Service fdd496
Packit Service fdd496
#define N_(msgid) msgid
Packit Service fdd496
Packit Service fdd496
/* Report an error for an invalid integer in an option argument.
Packit Service fdd496
Packit Service fdd496
   ERR is the error code returned by one of the xstrto* functions.
Packit Service fdd496
Packit Service fdd496
   Use OPT_IDX to decide whether to print the short option string "C"
Packit Service fdd496
   or "-C" or a long option string derived from LONG_OPTION.  OPT_IDX
Packit Service fdd496
   is -2 if the short option "C" was used, without any leading "-"; it
Packit Service fdd496
   is -1 if the short option "-C" was used; otherwise it is an index
Packit Service fdd496
   into LONG_OPTIONS, which should have a name preceded by two '-'
Packit Service fdd496
   characters.
Packit Service fdd496
Packit Service fdd496
   ARG is the option-argument containing the integer.
Packit Service fdd496
Packit Service fdd496
   After reporting an error, exit with status EXIT_STATUS if it is
Packit Service fdd496
   nonzero.  */
Packit Service fdd496
Packit Service fdd496
static void
Packit Service fdd496
xstrtol_error (enum strtol_error err,
Packit Service fdd496
               int opt_idx, char c, struct option const *long_options,
Packit Service fdd496
               char const *arg,
Packit Service fdd496
               int exit_status)
Packit Service fdd496
{
Packit Service fdd496
  char const *hyphens = "--";
Packit Service fdd496
  char const *msgid;
Packit Service fdd496
  char const *option;
Packit Service fdd496
  char option_buffer[2];
Packit Service fdd496
Packit Service fdd496
  switch (err)
Packit Service fdd496
    {
Packit Service fdd496
    default:
Packit Service fdd496
      abort ();
Packit Service fdd496
Packit Service fdd496
    case LONGINT_INVALID:
Packit Service fdd496
      msgid = N_("invalid %s%s argument '%s'");
Packit Service fdd496
      break;
Packit Service fdd496
Packit Service fdd496
    case LONGINT_INVALID_SUFFIX_CHAR:
Packit Service fdd496
    case LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW:
Packit Service fdd496
      msgid = N_("invalid suffix in %s%s argument '%s'");
Packit Service fdd496
      break;
Packit Service fdd496
Packit Service fdd496
    case LONGINT_OVERFLOW:
Packit Service fdd496
      msgid = N_("%s%s argument '%s' too large");
Packit Service fdd496
      break;
Packit Service fdd496
    }
Packit Service fdd496
Packit Service fdd496
  if (opt_idx < 0)
Packit Service fdd496
    {
Packit Service fdd496
      hyphens -= opt_idx;
Packit Service fdd496
      option_buffer[0] = c;
Packit Service fdd496
      option_buffer[1] = '\0';
Packit Service fdd496
      option = option_buffer;
Packit Service fdd496
    }
Packit Service fdd496
  else
Packit Service fdd496
    option = long_options[opt_idx].name;
Packit Service fdd496
Packit Service fdd496
  error (exit_status, 0, gettext (msgid), hyphens, option, arg);
Packit Service fdd496
}
Packit Service fdd496
Packit Service fdd496
/* Like xstrtol_error, except exit with a failure status.  */
Packit Service fdd496
Packit Service fdd496
void
Packit Service fdd496
xstrtol_fatal (enum strtol_error err,
Packit Service fdd496
               int opt_idx, char c, struct option const *long_options,
Packit Service fdd496
               char const *arg)
Packit Service fdd496
{
Packit Service fdd496
  xstrtol_error (err, opt_idx, c, long_options, arg, exit_failure);
Packit Service fdd496
  abort ();
Packit Service fdd496
}