Duane Clark wrote:
Howdy,
Running a FPGA design tool (Actel's Designer), I find that it works pretty good, but that certain printed status strings are being formatted incorrectly. It does not seem to affect the operation of the application, except for the status reports.
I further tracked this down to the routine FormatMessageA:
trace:resource:FormatMessageA (0xb00,0x400000,16973880,0x400,0x40585e48,512,(nil)) trace:resource:load_messageA instance = 00400000, id = 01030038, buffer = (nil), length = 100 trace:resource:RES_FindResource2 (00400000, 0000000b, 00000001, 0400, W, PE) trace:resource:RES_LoadResource (00400000, 0047ba80, PE) trace:resource:LockResource (00622b88) trace:resource:load_messageA - strlen=36 trace:resource:load_messageA instance = 00400000, id = 01030038, buffer = 0x403eb9a4, length = 37 trace:resource:RES_FindResource2 (00400000, 0000000b, 00000001, 0400, W, PE) trace:resource:RES_LoadResource (00400000, 0047ba80, PE) trace:resource:LockResource (00622b88) trace:resource:load_messageA - strlen=36 trace:string:lstrcpynA (0x403eb9a4, "Opened an existing design %s.\r\n", 36) trace:resource:load_messageA 'Opened an existing design %s.
' copied ! trace:resource:FormatMessageA Found a percent. Args = 0 trace:resource:FormatMessageA Default case trace:resource:FormatMessageA -- "Opened an existing design s. " trace:resource:FormatMessageA -- returning 29 ...
It looks like the routine ignores the FORMAT_MESSAGE_IGNORE_INSERTS flag. Sticking an if before the while loop that does the formatting seems to fix things:
if (dwFlags & FORMAT_MESSAGE_IGNORE_INSERTS) { while (*f && !eos) { ch = *f++; ADD_TO_T(ch); } } else { /* the rest of this is unchanged */ while (*f && !eos) { if (*f=='%') { ... }
I tested this against a half dozen apps, and have not found it to break anything yet.
Duane