]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
Don't let pr treat +1:-1 like +1:18446744073709551615.
authorJim Meyering <jim@meyering.net>
Fri, 1 Apr 2005 07:39:45 +0000 (07:39 +0000)
committerJim Meyering <jim@meyering.net>
Fri, 1 Apr 2005 07:39:45 +0000 (07:39 +0000)
(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.

src/pr.c

index 4e37931332baaa3b1ec85e37a4e523e06d33bfc2..dba1adf2c738a289bfb38aaa578622611d1ca99f 100644 (file)
--- a/src/pr.c
+++ b/src/pr.c
 #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;