string-util: explicitly cast character to unsigned

This also adds comment why we cast to unsigned.

Follow-up for 7971f9030a.

Addresses the comment https://github.com/systemd/systemd/pull/19544#discussion_r628472794.
This commit is contained in:
Yu Watanabe 2021-05-08 14:56:31 +09:00 committed by Lennart Poettering
parent 11c38d3e51
commit 3d56acef7f

View file

@ -130,7 +130,12 @@ static inline bool _pure_ in_charset(const char *s, const char* charset) {
}
static inline bool char_is_cc(char p) {
return (uint8_t) p < ' ' || p == 127;
/* char is unsigned on some architectures, e.g. aarch64. So, compiler may warn the condition
* p >= 0 is always true. See #19543. Hence, let's cast to unsigned before the comparison. Note
* that the cast in the right hand side is redundant, as according to the C standard, compilers
* automatically cast a signed value to unsigned when comparing with an unsigned variable. Just
* for safety and readability. */
return (uint8_t) p < (uint8_t) ' ' || p == 127;
}
bool string_has_cc(const char *p, const char *ok) _pure_;