summaryrefslogtreecommitdiff
path: root/src/pr.c
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2005-04-01 07:39:45 +0000
committerJim Meyering <jim@meyering.net>2005-04-01 07:39:45 +0000
commita21d9a21de1fee178c265a44f7f80aff1899b48f (patch)
treeb088a5a55c75167f6e0e5395ec150efba74cfdce /src/pr.c
parent015edf8dc7b3a5c9b0fcf4467b9bd5f294087e42 (diff)
downloadcoreutils-a21d9a21de1fee178c265a44f7f80aff1899b48f.tar.xz
Don't let pr treat +1:-1 like +1:18446744073709551615.
(strtoumax): Remove declaration. (first_last_page): Use xstrtoumax in place of strtoumax, so we don't interpret a negative page number (e.g., in an option like --pages=1:-1) as valid.
Diffstat (limited to 'src/pr.c')
-rw-r--r--src/pr.c20
1 files changed, 6 insertions, 14 deletions
diff --git a/src/pr.c b/src/pr.c
index 4e3793133..dba1adf2c 100644
--- a/src/pr.c
+++ b/src/pr.c
@@ -324,10 +324,6 @@
#include "timespec.h"
#include "xstrtol.h"
-#if ! (HAVE_DECL_STRTOUMAX || defined strtoumax)
-uintmax_t strtoumax ();
-#endif
-
/* The official name of this program (e.g., no `g' prefix). */
#define PROGRAM_NAME "pr"
@@ -806,20 +802,19 @@ first_last_page (char const *pages)
char *p;
uintmax_t first;
uintmax_t last = UINTMAX_MAX;
- int err;
+ strtol_error err = xstrtoumax (pages, &p, 10, &first, "");
+ if (err != LONGINT_OK && err != LONGINT_INVALID_SUFFIX_CHAR)
+ _STRTOL_ERROR (EXIT_FAILURE, pages, _("page range"), err);
- errno = 0;
- first = strtoumax (pages, &p, 10);
- err = errno;
if (p == pages || !first)
return false;
if (*p == ':')
{
char const *p1 = p + 1;
- errno = 0;
- last = strtoumax (p1, &p, 10);
- err |= errno;
+ err = xstrtoumax (p1, &p, 10, &last, "");
+ if (err != LONGINT_OK)
+ _STRTOL_ERROR (EXIT_FAILURE, pages, _("page range"), err);
if (p1 == p || last < first)
return false;
}
@@ -827,9 +822,6 @@ first_last_page (char const *pages)
if (*p)
return false;
- if (err)
- error (EXIT_FAILURE, err, _("Page range `%s'"), pages);
-
first_page_number = first;
last_page_number = last;
return true;