Hi,
I found a problem with the _snprintf() / _vsnprintf() functions. Wine seems to use the forward these function calls to their native implementation (eg. in GLIBC). The problem is that they behave differently under Windows and GLIBC:
Both function take a parameter to specify the maximum number of characters to write. Under Windows, if the formated string is equal in length to or exceeds the specified number, the terminating NULL will NOT be written to the buffer. Under Linux, the terminating NULL is ALWAYS written.
The test program below produces the following output (only when linked dynamically, of course) :
Under Windows: 0000000001**** Under Wine: 000000000 When compiled on Linux: 000000000
--------------------------------------------------------- #include <stdio.h> #include <memory.h>
int main() { char buffer[16]; memset(buffer, 0, 16); memset(buffer, '*', 15);
int len = _snprintf(buffer, 10, "%010d", 1);
printf("%d : %s\n", len, buffer);
return 0; } ---------------------------------------------------------
Regards,
Daniel