The atoi() function has undefined usage when trying to convert numbers outside the range of int.
When parsing numbers >= 2^31, GNU libc seems to truncate the number to 2^31-1; however, with MSVC, such a number would wrap, and when cast to an unsigned integer, numbers within an unsigned int are preserved.
Should Wine care about such undefined behaviour? Currently, it seems Wine uses the GNU libc implementation, giving a different result than when running in Windows.
(In my case, an IP address was given as a string, and ended up as "127.255.255.255" when running in Wine. I've now fixed that specific bug in the source code, but with other programs, that might not be an option...)
On Thu, 27 May 2004 22:02:58 +0200, André Johansen wrote:
Should Wine care about such undefined behaviour? Currently, it seems Wine uses the GNU libc implementation, giving a different result than when running in Windows.
Yes, if software depends on it we care ...
(In my case, an IP address was given as a string, and ended up as "127.255.255.255" when running in Wine. I've now fixed that specific bug in the source code, but with other programs, that might not be an option...)
... and it seems you just proved that some software does depend on it :(
I guess we should copy/paste the libc implementation and hack it to work the same way Microsofts does.