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: |