Added SDL_wcstol()
parent
7602a3181e
commit
6c28546828
|
@ -1106,16 +1106,7 @@ if(SDL_LIBC)
|
|||
set(${_HAVE_H} 1)
|
||||
endforeach()
|
||||
set(HAVE_SIGNAL_H 1)
|
||||
foreach(_FN
|
||||
malloc calloc realloc free bsearch qsort abs memset memcpy memmove memcmp
|
||||
wcslen _wcsdup wcsdup wcsstr wcscmp wcsncmp _wcsicmp _wcsnicmp
|
||||
strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
|
||||
_ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp
|
||||
_stricmp _strnicmp sscanf
|
||||
acos acosf asin asinf atan atanf atan2 atan2f ceil ceilf
|
||||
copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf
|
||||
log logf log10 log10f lround lroundf modf modff pow powf round roundf
|
||||
scalbn scalbnf sin sinf sqrt sqrtf tan tanf trunc truncf)
|
||||
foreach(_FN abs acos acosf asin asinf atan atan2 atan2f atanf atof atoi bsearch calloc ceil ceilf copysign copysignf cos cosf exp expf fabs fabsf floor floorf fmod fmodf free itoa log log10 log10f logf lround lroundf _ltoa malloc memcmp memcpy memmove memset modf modff pow powf qsort realloc round roundf scalbn scalbnf sin sinf sqrt sqrtf sscanf strchr strcmp _stricmp strlen _strlwr strncmp _strnicmp strrchr _strrev strstr strtod strtol strtoll strtoul _strupr tan tanf trunc truncf _ultoa wcscmp _wcsdup wcsdup _wcsicmp wcslen wcsncmp _wcsnicmp wcsstr wcstol)
|
||||
string(TOUPPER ${_FN} _UPPER)
|
||||
set(HAVE_${_UPPER} 1)
|
||||
endforeach()
|
||||
|
@ -1159,16 +1150,7 @@ if(SDL_LIBC)
|
|||
check_c_source_compiles("#include <sys/types.h>
|
||||
#include <sys/mman.h>
|
||||
int main(void) { return 0; }" HAVE_MPROTECT)
|
||||
foreach(_FN
|
||||
strtod malloc calloc realloc free getenv setenv putenv unsetenv
|
||||
bsearch qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat
|
||||
_strrev _strupr _strlwr index rindex strchr strrchr strstr strtok_r
|
||||
itoa _ltoa _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull
|
||||
atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp strcasestr
|
||||
wcscmp _wcsdup wcsdup wcslcat wcslcpy wcslen wcsncmp wcsstr
|
||||
wcscasecmp _wcsicmp wcsncasecmp _wcsnicmp
|
||||
sscanf vsscanf vsnprintf fopen64 fseeko fseeko64 _Exit
|
||||
)
|
||||
foreach(_FN abs atof atoi bcopy bsearch calloc _Exit fopen64 free fseeko fseeko64 getenv _i64toa index itoa _ltoa malloc memcmp memcpy memmove memset putenv qsort realloc rindex setenv sscanf strcasecmp strcasestr strchr strcmp _stricmp strlcat strlcpy strlen _strlwr strncasecmp strncmp _strnicmp strrchr _strrev strstr strtod strtok_r strtol strtoll strtoul strtoull _strupr _ui64toa _uitoa _ultoa unsetenv vsnprintf vsscanf wcscasecmp wcscmp _wcsdup wcsdup _wcsicmp wcslcat wcslcpy wcslen wcsncasecmp wcsncmp _wcsnicmp wcsstr wcstol)
|
||||
string(TOUPPER ${_FN} _UPPER)
|
||||
set(LIBC_HAS_VAR "LIBC_HAS_${_UPPER}")
|
||||
check_symbol_exists("${_FN}" "${STDC_HEADER_NAMES}" ${LIBC_HAS_VAR})
|
||||
|
|
|
@ -536,6 +536,7 @@ extern DECLSPEC int SDLCALL SDL_wcscmp(const wchar_t *str1, const wchar_t *str2)
|
|||
extern DECLSPEC int SDLCALL SDL_wcsncmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen);
|
||||
extern DECLSPEC int SDLCALL SDL_wcscasecmp(const wchar_t *str1, const wchar_t *str2);
|
||||
extern DECLSPEC int SDLCALL SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t len);
|
||||
extern DECLSPEC long SDLCALL SDL_wcstol(const wchar_t *str, wchar_t **endp, int base);
|
||||
|
||||
extern DECLSPEC size_t SDLCALL SDL_strlen(const char *str);
|
||||
extern DECLSPEC size_t SDLCALL SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen);
|
||||
|
|
|
@ -102,6 +102,7 @@
|
|||
#cmakedefine HAVE__WCSICMP 1
|
||||
#cmakedefine HAVE_WCSNCASECMP 1
|
||||
#cmakedefine HAVE__WCSNICMP 1
|
||||
#cmakedefine HAVE_WCSTOL 1
|
||||
#cmakedefine HAVE_STRLEN 1
|
||||
#cmakedefine HAVE_STRLCPY 1
|
||||
#cmakedefine HAVE_STRLCAT 1
|
||||
|
|
|
@ -858,6 +858,7 @@ SDL3_0.0.0 {
|
|||
SDL_GetDisplayContentScale;
|
||||
SDL_GetWindowDisplayScale;
|
||||
SDL_GetWindowPixelDensity;
|
||||
SDL_wcstol;
|
||||
# extra symbols go here (don't modify this line)
|
||||
local: *;
|
||||
};
|
||||
|
|
|
@ -884,3 +884,4 @@
|
|||
#define SDL_GetDisplayContentScale SDL_GetDisplayContentScale_REAL
|
||||
#define SDL_GetWindowDisplayScale SDL_GetWindowDisplayScale_REAL
|
||||
#define SDL_GetWindowPixelDensity SDL_GetWindowPixelDensity_REAL
|
||||
#define SDL_wcstol SDL_wcstol_REAL
|
||||
|
|
|
@ -929,3 +929,4 @@ SDL_DYNAPI_PROC(char*,SDL_GetPath,(SDL_Folder a),(a),return)
|
|||
SDL_DYNAPI_PROC(float,SDL_GetDisplayContentScale,(SDL_DisplayID a),(a),return)
|
||||
SDL_DYNAPI_PROC(float,SDL_GetWindowDisplayScale,(SDL_Window *a),(a),return)
|
||||
SDL_DYNAPI_PROC(float,SDL_GetWindowPixelDensity,(SDL_Window *a),(a),return)
|
||||
SDL_DYNAPI_PROC(long,SDL_wcstol,(const wchar_t *a, wchar_t **b, int c),(a,b,c),return)
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
#include <psp2/kernel/clib.h>
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOL) || !defined(HAVE_STRTOUL) || !defined(HAVE_STRTOD) || !defined(HAVE_STRTOLL) || !defined(HAVE_STRTOULL)
|
||||
#if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOL) || !defined(HAVE_WCSTOL) || !defined(HAVE_STRTOUL) || !defined(HAVE_STRTOD) || !defined(HAVE_STRTOLL) || !defined(HAVE_STRTOULL)
|
||||
#define SDL_isupperhex(X) (((X) >= 'A') && ((X) <= 'F'))
|
||||
#define SDL_islowerhex(X) (((X) >= 'a') && ((X) <= 'f'))
|
||||
#endif
|
||||
|
@ -93,6 +93,50 @@ static size_t SDL_ScanLong(const char *text, int count, int radix, long *valuep)
|
|||
}
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_WCSTOL)
|
||||
static size_t SDL_ScanLongW(const wchar_t *text, int count, int radix, long *valuep)
|
||||
{
|
||||
const wchar_t *textstart = text;
|
||||
long value = 0;
|
||||
SDL_bool negative = SDL_FALSE;
|
||||
|
||||
if (*text == '-') {
|
||||
negative = SDL_TRUE;
|
||||
++text;
|
||||
}
|
||||
if (radix == 16 && SDL_wcsncmp(text, L"0x", 2) == 0) {
|
||||
text += 2;
|
||||
}
|
||||
for (;;) {
|
||||
int v;
|
||||
if (*text >= '0' && *text <= '9') {
|
||||
v = *text - '0';
|
||||
} else if (radix == 16 && SDL_isupperhex(*text)) {
|
||||
v = 10 + (*text - 'A');
|
||||
} else if (radix == 16 && SDL_islowerhex(*text)) {
|
||||
v = 10 + (*text - 'a');
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
value *= radix;
|
||||
value += v;
|
||||
++text;
|
||||
|
||||
if (count > 0 && (text - textstart) == count) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (valuep && text > textstart) {
|
||||
if (negative && value) {
|
||||
*valuep = -value;
|
||||
} else {
|
||||
*valuep = value;
|
||||
}
|
||||
}
|
||||
return text - textstart;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !defined(HAVE_VSSCANF) || !defined(HAVE_STRTOUL) || !defined(HAVE_STRTOD)
|
||||
static size_t SDL_ScanUnsignedLong(const char *text, int count, int radix, unsigned long *valuep)
|
||||
{
|
||||
|
@ -530,6 +574,30 @@ int SDL_wcsncasecmp(const wchar_t *str1, const wchar_t *str2, size_t maxlen)
|
|||
#endif /* HAVE__WCSNICMP */
|
||||
}
|
||||
|
||||
long SDL_wcstol(const wchar_t *string, wchar_t **endp, int base)
|
||||
{
|
||||
#ifdef HAVE_WCSTOL
|
||||
return wcstol(string, endp, base);
|
||||
#else
|
||||
size_t len;
|
||||
long value = 0;
|
||||
|
||||
if (!base) {
|
||||
if ((SDL_wcslen(string) > 2) && (SDL_wcsncmp(string, L"0x", 2) == 0)) {
|
||||
base = 16;
|
||||
} else {
|
||||
base = 10;
|
||||
}
|
||||
}
|
||||
|
||||
len = SDL_ScanLongW(string, 0, base, &value);
|
||||
if (endp) {
|
||||
*endp = (wchar_t *)string + len;
|
||||
}
|
||||
return value;
|
||||
#endif /* HAVE_WCSTOL */
|
||||
}
|
||||
|
||||
size_t SDL_strlcpy(SDL_OUT_Z_CAP(maxlen) char *dst, const char *src, size_t maxlen)
|
||||
{
|
||||
#ifdef HAVE_STRLCPY
|
||||
|
|
Loading…
Reference in New Issue