Fix Tcl typemaps to handle unsigned long > LONG_MAX and unsigned long long
> LONG_LONG_MAX when converting values from Tcl to C/C++. Fixes bug #1533266. git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@9351 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
61472bb0ac
commit
fdd51d4080
1 changed files with 13 additions and 11 deletions
|
|
@ -75,15 +75,19 @@ SWIG_AsVal_dec(unsigned long)(Tcl_Obj *obj, unsigned long *val) {
|
|||
if (v >= 0) {
|
||||
if (val) *val = (unsigned long) v;
|
||||
return SWIG_OK;
|
||||
} else {
|
||||
return SWIG_OverflowError;
|
||||
}
|
||||
} else {
|
||||
/* If v is negative, then this could be a negative number, or an
|
||||
unsigned value which doesn't fit in a signed long, so try to
|
||||
get it as a string so we can distinguish these cases. */
|
||||
}
|
||||
{
|
||||
int len = 0;
|
||||
const char *nptr = Tcl_GetStringFromObj(obj, &len);
|
||||
if (nptr && len > 0) {
|
||||
char *endptr;
|
||||
unsigned long v = strtoul(nptr, &endptr,0);
|
||||
unsigned long v;
|
||||
if (*nptr == '-') return SWIG_OverflowError;
|
||||
v = strtoul(nptr, &endptr,0);
|
||||
if (errno == ERANGE) {
|
||||
errno = 0;
|
||||
return SWIG_OverflowError;
|
||||
|
|
@ -176,18 +180,16 @@ SWIG_AsVal_dec(unsigned long long)(Tcl_Obj *obj, unsigned long long *val)
|
|||
{
|
||||
long v;
|
||||
if (Tcl_GetLongFromObj(0,obj, &v) == TCL_OK) {
|
||||
if (v >= 0) {
|
||||
if (val) *val = (long) v;
|
||||
return SWIG_OK;
|
||||
} else {
|
||||
return SWIG_OverflowError;
|
||||
}
|
||||
if (val) *val = (unsigned long) v;
|
||||
return SWIG_OK;
|
||||
} else {
|
||||
int len = 0;
|
||||
const char *nptr = Tcl_GetStringFromObj(obj, &len);
|
||||
if (nptr && len > 0) {
|
||||
char *endptr;
|
||||
unsigned long long v = strtoull(nptr, &endptr,0);
|
||||
unsigned long long v;
|
||||
if (*nptr == '-') return SWIG_OverflowError;
|
||||
v = strtoull(nptr, &endptr,0);
|
||||
if (errno == ERANGE) {
|
||||
errno = 0;
|
||||
return SWIG_OverflowError;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue