Optimize and simplify svn_checksum_parse_hex(). In my tests, the new version is 20% to 30% faster. The EBCDIC port would probably need an #ifdef here.
Also happens to fix the case of input with uppercase A-F characters. We neither parsed them correctly nor rejected them as invalid. Now we accept _and_ parse them correctly.
* subversion/libsvn_subr/checksum.c (svn_checksum_parse_hex): Rewrite to do a single table lookup to find the validity and value of a hex byte, rather than two lookups (svn_ctype_isxdigit, svn_ctype_isalpha) plus some ASCII math. Also, don't bother to qualify char as unsigned except where actually needed, and rename is_zeros to is_nonzero to match its meaning.
Fix 'svnadmin verify' for format 5 repositories. During the checking process, they yield NULL for SHA1 checksums. The most robust way to fix that is to allow NULL for checksum in svn_checksum_to_cstring. This seems justified as NULL is already a valid return value instead of e.g. an empty string. So, callers may receive NULL as result and could therefore assume that NULL is a valid input, too
* subversion/include/svn_checksum.h (svn_checksum_to_cstring): extend doc string * subversion/libsvn_subr/checksum.c (svn_checksum_to_cstring): return NULL for NULL checksums as well