import strtoi64 from wine 1.3.10

svn path=/trunk/; revision=50159
This commit is contained in:
Christoph von Wittich 2010-12-27 12:45:03 +00:00
parent cd7f6a4a36
commit fdea91b64c

View file

@ -4,8 +4,62 @@
__int64 __int64
_strtoi64(const char *nptr, char **endptr, int base) _strtoi64(const char *nptr, char **endptr, int base)
{ {
TRACE("_strtoi64 is UNIMPLEMENTED\n"); BOOL negative = FALSE;
return 0; __int64 ret = 0;
while(isspace(*nptr)) nptr++;
if(*nptr == '-') {
negative = TRUE;
nptr++;
} else if(*nptr == '+')
nptr++;
if((base==0 || base==16) && *nptr=='0' && tolower(*(nptr+1))=='x') {
base = 16;
nptr += 2;
}
if(base == 0) {
if(*nptr=='0')
base = 8;
else
base = 10;
}
while(*nptr) {
char cur = tolower(*nptr);
int v;
if(isdigit(cur)) {
if(cur >= '0'+base)
break;
v = cur-'0';
} else {
if(cur<'a' || cur>='a'+base-10)
break;
v = cur-'a'+10;
}
if(negative)
v = -v;
nptr++;
if(!negative && (ret>_I64_MAX/base || ret*base>_I64_MAX-v)) {
ret = _I64_MAX;
*_errno() = ERANGE;
} else if(negative && (ret<_I64_MIN/base || ret*base<_I64_MIN-v)) {
ret = _I64_MIN;
*_errno() = ERANGE;
} else
ret = ret*base + v;
}
if(endptr)
*endptr = (char*)nptr;
return ret;
} }