ensure that uint8_t is unsigned char
On a POSIX platform, uint8_t is required to exist, but not explicitly required to be identical to unsigned char. It's theoretically possible that a very unusual platform could have an extension integer type that it defines as uint8_t. Test for this at configure time.
This supports an effort to move toward using uint8_t as the "byte" type in preference to char (which is often a signed type and can cause bugs related to signed arithmetic).