From: Yu Watanabe Date: Sat, 8 May 2021 05:56:31 +0000 (+0900) Subject: string-util: explicitly cast character to unsigned X-Git-Tag: v249-rc1~267 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3d56acef7f73fd7a2e9f23b89340e0849283078d;p=thirdparty%2Fsystemd.git string-util: explicitly cast character to unsigned This also adds comment why we cast to unsigned. Follow-up for 7971f9030ae4bebe0d4a6845ed31584f8ab18103. Addresses the comment https://github.com/systemd/systemd/pull/19544#discussion_r628472794. --- diff --git a/src/basic/string-util.h b/src/basic/string-util.h index 3884777792c..4ef3254dc5d 100644 --- a/src/basic/string-util.h +++ b/src/basic/string-util.h @@ -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_;