Ok, I've merged the initial CStdString removal work. It's quite neutered now, so proliferation should be kept to a minimum.
It took a LOT of (mostly) boring effort, and a lot of tedious but incredibly important review - thank you to those that did the work (night199uk) and those that helped with review (AlTheKiller, WiSo) - greatly appreciated. Also a shoutout to the jenkins guys. Without jenkins, I wouldn't have had a shot at getting it into shape for platforms I didn't have build systems up for.
There's 3 main things left:
1. Equals(). This is caseless by default in CStdString. I've made a start, and suggest others build off it here:
https://github.com/jmarshallnz/xbmc/tree/kill_equals
If you want to help out, please let me know so we can minimise duplicate effort. Please keep commits small and manageable, and clearly specify intent. For example, a commit that just handles cases where we compare against non-alpha characters can clearly be changed to == without much review effort being spent, as it isn't case-less. Don't make multiple changes that might be caseless or might not be in the same commit please. Anything you're not sure of, clearly mark in the commit message. I can always merge commits later, but splitting them up is no fun at all. Every single line will need careful review. Fortunately there's only a few thousand...
2. We'll need to remove the implicit cast to .c_str() and see what fallout that has. I suspect not a lot, as most of it will be in things like Format() which has already been taken care of.
3. We'll need to check very carefully for we're we are assigning (potentially) NULL const char*'s to CStdString's. It may be possible to track these down by explicitly removing the const char* constructor from CStdString. I expect there'll be a LOT of chaff to trawl through though...
All these will be post-Gotham unless specific fixes are discovered in the process, which I wouldn't at all be surprised at. If so, I'll pull them out individually.
Cheers,
Jonathan