Your solution is very good & portable as well - the only downside is the verbosity.
As you alluded to, I am wondering how many computers there are that don't use ASCII? Mainframes, VAX machines etc. I would have thought the vast majority of computers for personal use, use ASCII, so the solution I hinted at would be fine for most people.
The code for the toupper function as described by Kernighan & Ritchie, uses math on the char value, and it also has code to deal with EBCDIC.