#include "quote.h"
#include "xstrtod.h"
-/* Roll our own isfinite rather than using <math.h>, so that we don't
+/* Roll our own isfinite/isnan rather than using <math.h>, so that we don't
have to worry about linking -lm just for isfinite. */
#ifndef isfinite
# define isfinite(x) ((x) * 0 == 0)
#endif
+#ifndef isnan
+# define isnan(x) ((x) != (x))
+#endif
/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "seq"
FIRST, INCREMENT, and LAST are interpreted as floating point values.\n\
INCREMENT is usually positive if FIRST is smaller than LAST, and\n\
INCREMENT is usually negative if FIRST is greater than LAST.\n\
-INCREMENT must not be 0.\n\
+INCREMENT must not be 0; none of FIRST, INCREMENT and LAST may be NaN.\n\
"), stdout);
fputs (_("\
FORMAT must be suitable for printing one argument of type 'double';\n\
usage (EXIT_FAILURE);
}
+ if (isnan (ret.value))
+ {
+ error (0, 0, _("invalid %s argument: %s"), quote_n (0, "not-a-number"),
+ quote_n (1, arg));
+ usage (EXIT_FAILURE);
+ }
+
/* We don't output spaces or '+' so don't include in width */
while (isspace (to_uchar (*arg)) || *arg == '+')
arg++;
my $prog = 'seq';
my $try_help = "Try '$prog --help' for more information.\n";
my $err_inc_zero = "seq: invalid Zero increment value: '0'\n".$try_help;
+my $err_nan_arg = "seq: invalid 'not-a-number' argument: 'nan'\n".$try_help;
my $locale = $ENV{LOCALE_FR_UTF8};
! defined $locale || $locale eq 'none'
{ERR_SUBST => 's/0.0/0/'}],
['inc-zero-4', qw(1 -0.0e-10 10), {EXIT => 1},{ERR => $err_inc_zero},
{ERR_SUBST => 's/-0\.0e-10/0/'}],
+
+ # Ensure NaN arguments rejected.
+ ['nan-first-1', qw(nan), {EXIT => 1}, {ERR => $err_nan_arg}],
+ ['nan-first-2', qw(NaN 2), {EXIT => 1}, {ERR => $err_nan_arg},
+ {ERR_SUBST => 's/NaN/nan/'}],
+ ['nan-first-3', qw(nan 1 2), {EXIT => 1}, {ERR => $err_nan_arg}],
+ ['nan-first-4', qw(-- -nan), {EXIT => 1}, {ERR => $err_nan_arg},
+ {ERR_SUBST => 's/-nan/nan/'}],
+ ['nan-inc-1', qw(1 nan 2), {EXIT => 1}, {ERR => $err_nan_arg}],
+ ['nan-inc-2', qw(1 -NaN 2), {EXIT => 1}, {ERR => $err_nan_arg},
+ {ERR_SUBST => 's/-NaN/nan/'}],
+ ['nan-last-1', qw(1 1 nan), {EXIT => 1}, {ERR => $err_nan_arg}],
+ ['nan-last-2', qw(1 NaN), {EXIT => 1}, {ERR => $err_nan_arg},
+ {ERR_SUBST => 's/NaN/nan/'}],
+ ['nan-last-3', qw(0 -1 -NaN), {EXIT => 1}, {ERR => $err_nan_arg},
+ {ERR_SUBST => 's/-NaN/nan/'}],
);
# Append a newline to each entry in the OUT array.