On 5/4/21 4:48 AM, Piotr Caban wrote:
Hi Zeb,
On 5/4/21 6:41 AM, Zebediah Figura wrote:
-@ cdecl -ret64 _Getcvt() +@ cdecl -ret64 _Getcvt(ptr)
It used to be: @ cdecl _Getcvt(ptr)
Taking in account there was some discussion regarding lldiv I guess it should be changed differently. Probably current implementation is incorrect on some platforms. I guess it should look like this: #if (defined(__GNUC__) && defined(__i386__) //TODO: check if we need similar workaround for x86_64 /* Workaround a bug in GCC */ ULONGLONG __cdecl _Getcvt(void) { union { _Cvtvec cvtvec; ULONGLONG ull; } ret;
TRACE("\n"); ret.cvtvec.page = ___lc_codepage_func(); ret.cvtvec.handle = ___lc_handle_func()[LC_CTYPE]; return ret.ull;
} #else _Cvtvec __cdecl _Getcvt(void) { _Cvtvec ret = {0}; #if _MSVCP_VER >= 110 int i; #endif
TRACE("\n"); ret.cvtvec.page = ___lc_codepage_func();
#if _MSVCP_VER < 110 ret.cvtvec.handle = ___lc_handle_func()[LC_CTYPE]; #else ret->mb_max = ___mb_cur_max_func();
if(ret->mb_max > 1) { for(i=0; i<256; i++) if(_ismbblead(i)) ret->isleadbyte[i/8] |= 1 << (i&7); }
#endif return ret; } #endif
And the spec file entry can be changed to: @ cdecl -norelay _Getcvt()
Please note that code written here is completely untested. I'm just raising some possible concerns.
Sorry for the silence. I expect you're right. I'll get around to properly testing this at some point.