Author: pluknet
Date: Wed Aug 21 22:37:15 2013
New Revision: 254621
URL: http://svnweb.freebsd.org/changeset/base/254621

Log:
  Reset errno before strtoumax() call to properly detect ERANGE.
  Restore saved errno if strtoumax() call is successful.
  
  Reported by:  ache
  Reviewed by:  jilles
  MFC after:    1 week

Modified:
  head/lib/libutil/expand_number.c

Modified: head/lib/libutil/expand_number.c
==============================================================================
--- head/lib/libutil/expand_number.c    Wed Aug 21 22:30:11 2013        
(r254620)
+++ head/lib/libutil/expand_number.c    Wed Aug 21 22:37:15 2013        
(r254621)
@@ -50,15 +50,22 @@ int
 expand_number(const char *buf, uint64_t *num)
 {
        uint64_t number;
+       int saved_errno;
        unsigned shift;
        char *endptr;
 
+       saved_errno = errno;
+       errno = 0;
+
        number = strtoumax(buf, &endptr, 0);
 
        if (number == UINTMAX_MAX && errno == ERANGE) {
                return (-1);
        }
 
+       if (errno == 0)
+               errno = saved_errno;
+
        if (endptr == buf) {
                /* No valid digits. */
                errno = EINVAL;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to