#include <windows.h> | |
#include <stdio.h> | |
float __cdecl | |
__mingw_wcstof (const wchar_t * __restrict__ _Str, wchar_t ** __restrict__ _EndPtr); | |
float __cdecl | |
__mingw_wcstof (const wchar_t * __restrict__ _Str, wchar_t ** __restrict__ _EndPtr) | |
{ | |
float r; | |
char *n, *ep = NULL; | |
size_t l, l2; | |
l = WideCharToMultiByte(CP_UTF8, 0, _Str, -1, NULL, 0, NULL, NULL); | |
n = alloca (l + 1); | |
if (l != 0) WideCharToMultiByte (CP_UTF8, 0, _Str, -1, n, l, NULL, NULL); | |
n[l] = 0; | |
r = __mingw_strtof (n, &ep); | |
if (ep != NULL) | |
{ | |
*ep = 0; | |
l2 = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, n, -1, NULL, 0); | |
if (l2 > 0) | |
l2 -= 1; /* Remove zero terminator from length. */ | |
*_EndPtr = (wchar_t *) &_Str[l2]; | |
} | |
else | |
*_EndPtr = NULL; | |
return r; | |
} | |