Diff for /embedaddon/sudo/common/atoid.c between versions 1.1 and 1.1.1.2

version 1.1, 2013/10/14 07:56:33 version 1.1.1.2, 2014/06/15 16:12:54
Line 41 Line 41
 #include <limits.h>  #include <limits.h>
   
 #define DEFAULT_TEXT_DOMAIN     "sudo"  #define DEFAULT_TEXT_DOMAIN     "sudo"
#include "gettext.h"#include "gettext.h"            /* must be included before missing.h */
   
 #include "missing.h"  #include "missing.h"
 #include "sudo_debug.h"  #include "sudo_debug.h"
   #include "sudo_util.h"
   
 /*  /*
  * Parse a uid/gid in string form.   * Parse a uid/gid in string form.
Line 74  atoid(const char *p, const char *sep, char **endp, con Line 75  atoid(const char *p, const char *sep, char **endp, con
             } while (*sep++ != '\0');              } while (*sep++ != '\0');
         }          }
         if (!valid) {          if (!valid) {
            *errstr = N_("invalid value");            if (errstr != NULL)
                 *errstr = N_("invalid value");
             errno = EINVAL;              errno = EINVAL;
             goto done;              goto done;
         }          }
        if ((errno == ERANGE && (lval == LONG_MAX || lval == LONG_MIN)) ||        if ((errno == ERANGE && lval == LONG_MAX) || lval > INT_MAX) {
            (lval > INT_MAX || lval < INT_MIN)) { 
             errno = ERANGE;              errno = ERANGE;
            *errstr = N_("value out of range");            if (errstr != NULL)
                 *errstr = N_("value too large");
             goto done;              goto done;
         }          }
           if ((errno == ERANGE && lval == LONG_MIN) || lval < INT_MIN) {
               errno = ERANGE;
               if (errstr != NULL)
                   *errstr = N_("value too small");
               goto done;
           }
         rval = (id_t)lval;          rval = (id_t)lval;
         *errstr = NULL;  
     } else {      } else {
         unsigned long ulval = strtoul(p, &ep, 10);          unsigned long ulval = strtoul(p, &ep, 10);
         if (ep != p) {          if (ep != p) {
Line 96  atoid(const char *p, const char *sep, char **endp, con Line 103  atoid(const char *p, const char *sep, char **endp, con
             } while (*sep++ != '\0');              } while (*sep++ != '\0');
         }          }
         if (!valid) {          if (!valid) {
            *errstr = N_("invalid value");            if (errstr != NULL)
                 *errstr = N_("invalid value");
             errno = EINVAL;              errno = EINVAL;
             goto done;              goto done;
         }          }
         if ((errno == ERANGE && ulval == ULONG_MAX) || ulval > UINT_MAX) {          if ((errno == ERANGE && ulval == ULONG_MAX) || ulval > UINT_MAX) {
             errno = ERANGE;              errno = ERANGE;
            *errstr = N_("value too large");            if (errstr != NULL)
                 *errstr = N_("value too large");
             goto done;              goto done;
         }          }
         rval = (id_t)ulval;          rval = (id_t)ulval;
         *errstr = NULL;  
     }      }
       if (errstr != NULL)
           *errstr = NULL;
     if (endp != NULL)      if (endp != NULL)
         *endp = ep;          *endp = ep;
 done:  done:

Removed from v.1.1  
changed lines
  Added in v.1.1.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>