diff -ur coreutils-5.2.1-old/src/seq.c coreutils-5.2.1/src/seq.c --- coreutils-5.2.1-old/src/seq.c 2005-06-07 16:50:16.016210726 -0500 +++ coreutils-5.2.1/src/seq.c 2005-06-07 17:10:44.853692544 -0500 @@ -102,6 +102,7 @@ INCREMENT is usually negative if FIRST is greater than LAST.\n\ When given, the FORMAT argument must contain exactly one of\n\ the printf-style, floating point output formats %e, %f, %g\n\ +or one of the printf-style, integer output formats %o, %x\n\ "), stdout); printf (_("\nReport bugs to <%s>.\n"), PACKAGE_BUGREPORT); } @@ -126,11 +127,14 @@ } /* Check whether the format string is valid for a single `double' - argument. Return 0 if not, 1 if correct. */ + argument. Return 0 if not, 1 if correct, 2 if a conversion + to int is necessary. */ static int valid_format (const char *fmt) { + int end_return = 1; + while (*fmt != '\0') { if (*fmt == '%') @@ -158,7 +162,11 @@ } if (!(*fmt == 'e' || *fmt == 'f' || *fmt == 'g')) - return 0; + { + end_return = 2; + if (!(*fmt == 'o' || *fmt == 'x')) + return 0; + } fmt++; while (*fmt != '\0') @@ -173,13 +181,13 @@ fmt++; } - return 1; + return end_return; } /* Actually print the sequence of numbers in the specified range, with the given or default stepping and format. */ static void -print_numbers (const char *fmt) +print_numbers (const char *fmt, int integerize) { double i; @@ -190,7 +198,10 @@ break; if (i) fputs (separator, stdout); - printf (fmt, x); + if (integerize) + printf (fmt, (int) x); + else + printf (fmt, x); } if (i) @@ -298,6 +309,7 @@ main (int argc, char **argv) { int optc; + int valid_return; int step_is_set; /* The printf(3) format used for output. */ @@ -383,7 +395,7 @@ usage (EXIT_FAILURE); } - if (format_str && !valid_format (format_str)) + if (format_str && !(valid_return = valid_format (format_str))) { error (0, 0, _("invalid format string: `%s'"), format_str); usage (EXIT_FAILURE); @@ -426,7 +438,7 @@ format_str = "%g"; } - print_numbers (format_str); + print_numbers (format_str, valid_return - 1); exit (EXIT_SUCCESS); }