I've been cleaning up a bunch of code lately (including warnings from our forthcoming static analysis tool.)
I'm seeing a bunch of old code that uses integers when "unsigned int" was obviously the intended meaning. For instance:
AddEntriesyToList( ENTRY * pEntry, int cEntries )
There's realistically no way that you'd ever want to pass a negative number, so DON'T DECLARE IT AS AN INT!!! The same goes for LONGs vs ULONGs, INT_PTR vs UINT_PTR, and so on.
You'll often know you're in the presence of this code when you see "%d" used in printf/sprintf string.
I've written a lot of code to be cross-CPU compatible, so I've become especially attuned to declaring the right data type.
My assertion: all of your integer data types should explicitly be defined as unsigned by default, unless you can articulate why they should be signed.