Added visual studio equivalent of libc's strtoull() - name redefine for newer VS versions, custom implementation for VS6 (I hope it works).

This should fix the compilation error from r14242 (bugreport:4059).

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@14245 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
ultramage 2010-02-15 11:54:21 +00:00
parent df78683650
commit 8dfa315ce8
3 changed files with 46 additions and 0 deletions

View File

@ -234,6 +234,9 @@ typedef int32 intptr;
#define strncmpi strncasecmp
#define strnicmp strncasecmp
#endif
#if defined(_MSC_VER) && _MSC_VER > 1200
#define strtoull _strtoui64
#endif
// keyword replacement in windows
#ifdef _WIN32

View File

@ -9,6 +9,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
@ -251,6 +252,44 @@ size_t strnlen (const char* string, size_t maxlen)
}
#endif
#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER <= 1200
unsigned long long strtoull(const char* str, char** endptr, int base)
{
unsigned long long result;
int count;
int n;
if( base == 0 )
{
if( str[0] == '0' && (str[1] == 'x' || str[1] == 'X') )
base = 16;
else
if( str[0] == '0' )
base = 8;
}
if( base == 10 )
count = sscanf(str, "%I64u%n", &result, &n);
else
if( base == 16 )
count = sscanf(str, "%I64x%n", &result, &n);
else
count = 0; // fail
if( count < 1 )
{
errno = EINVAL;
result = 0;
n = 0;
}
if( endptr )
*endptr = (char*)str + n;
return result;
}
#endif
//----------------------------------------------------
// E-mail check: return 0 (not correct) or 1 (valid).
//----------------------------------------------------

View File

@ -28,6 +28,10 @@ char* _strtok_r(char* s1, const char* s2, char** lasts);
size_t strnlen (const char* string, size_t maxlen);
#endif
#if defined(WIN32) && defined(_MSC_VER) && _MSC_VER <= 1200
unsigned long long strtoull(const char* str, char** endptr, int base);
#endif
int e_mail_check(char* email);
int config_switch(const char* str);