Alexandre Julliard wrote:
Umm, I'm not and if I am, I should be shot. The logic behind what I'm doing is more or less as follows:- you can't use the libc printf to print unicode chars, the format is not the same
1. Print all non-formatting characters to file;
2. Parse the formatting string, converting between %S and %s.
3. Print the formatting string with arguments, converting the unicode strings via WideStringToMultiByte;
So yes, the strings will be converted before being printed since I'm printing them via the %s formatting specifier. (And the test code results does show that this is indeed the case)
*grumble* Thanks. I'm now making now that I get the length of the result string via WideCharToMultiByte before allocating and filling the buffer with another call to WideCharToString. Initially I thought that a strlenW would suffice, obviously not.- WideCharToMultiByte can output several characters for a single unicode char, you need to take that into account for buffer sizes
You had me stumped here for a while as to where I'm doing this stupidity. A search brought this up:- you cannot cast a WCHAR* into a CHAR* to convert the format to ASCII
case (WCHAR)L'd':
case (WCHAR)L'i':
case (WCHAR)L'o':
case (WCHAR)L'u':
case (WCHAR)L'X':
case (WCHAR)L'x':
pFormat->nType = VFMT_INTEGER;
strncat(pFormat->szFmt, (CHAR *)szFmt, 1);
break;
...
I want to grab the last formatting char and append it to my buffer. Now I could do,
...
case (WCHAR)L'u':
pFormat->nType = VFMT_INTEGER;
strcat(pFormat->szFmt, "u");
break;
case (WCHAR)L'X':
pFormat->nType = VFMT_INTEGER;
strcat(pFormat->szFmt, "X");
break;
case (WCHAR)L'x':
pFormat->nType = VFMT_INTEGER;
strcat(pFormat->szFmt, "x");
break;
...
for every instance, which problably is more readable/understandable (and the way I had it before I "optimized" a bit :)). What I did put down in the first instance however, does work as intended since I'm only interrested in the first byte/character pointed to by the szFmt pointer. If "sizeof(CHAR) != 1" and "arch != ix86" then we are in trouble here. However, you are right, it is problably confusing and will make maintenance a bitch.
As I'm building up the format string, I'm using it to append only the current formatting character to the buffer I'll eventually be using to print. A suggestion for a better approach is always welcome.- there's no point in using strncat if you don't pass it the real size of the buffer
I won't include the test case in the next patch. As a real wine test case I'm anyway not sure of the full value, as a debugging tool and making sure that I get the correct output, it is extremely valuable.- please don't copy code from MSDN, it is copyrighted by Microsoft.
Greetings,
Jaco