In other words, I don't think the patch is acceptable. What I'd suggest: -- figure out why the real CharNextA() is slow, and try to fix that -- figure out why it takes so long to call CharNextW()
As I said originally, its not that CharNextW/CharNextA are particularly slow, its the number of times they're called. Obviously calling a function to do a simple string increment is going to be slower.
CharNextW takes on average 168.5340us. However it is called 12396 times when opening the save box for IDA. As I said, IDA supplies quite a large string of filter expressions to the save box. This results in a total time of 2089146.9655us being spent in the CharNextW function.
I will move CharNextW to be a static function of that file to see if its some weirdness with external functions in WINE, or if its just calling a function in general.