From: Mike Yuan Date: Thu, 9 May 2024 13:58:36 +0000 (+0800) Subject: basic/utf8: modernize ascii_is_valid_n, make ascii_is_valid static inline X-Git-Tag: v257-rc1~1132^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4d06bf59229ed766ba8fdd83c2712701291277f4;p=thirdparty%2Fsystemd.git basic/utf8: modernize ascii_is_valid_n, make ascii_is_valid static inline --- diff --git a/src/basic/utf8.c b/src/basic/utf8.c index fd1e96c68ce..4d1b31f26d0 100644 --- a/src/basic/utf8.c +++ b/src/basic/utf8.c @@ -271,27 +271,14 @@ char *utf8_escape_non_printable_full(const char *str, size_t console_width, bool return str_realloc(p); } -char *ascii_is_valid(const char *str) { - /* Check whether the string consists of valid ASCII bytes, - * i.e values between 0 and 127, inclusive. */ +char* ascii_is_valid_n(const char *str, size_t len) { + /* Check whether the string consists of valid ASCII bytes, i.e values between 1 and 127, inclusive. + * Stops at len, or NUL byte if len is SIZE_MAX. */ assert(str); - for (const char *p = str; *p; p++) - if ((unsigned char) *p >= 128) - return NULL; - - return (char*) str; -} - -char *ascii_is_valid_n(const char *str, size_t len) { - /* Very similar to ascii_is_valid(), but checks exactly len - * bytes and rejects any NULs in that range. */ - - assert(str); - - for (size_t i = 0; i < len; i++) - if ((unsigned char) str[i] >= 128 || str[i] == 0) + for (size_t i = 0; len != SIZE_MAX ? i < len : str[i] != '\0'; i++) + if ((unsigned char) str[i] >= 128 || str[i] == '\0') return NULL; return (char*) str; diff --git a/src/basic/utf8.h b/src/basic/utf8.h index fbd3318987b..301c50cc2ff 100644 --- a/src/basic/utf8.h +++ b/src/basic/utf8.h @@ -18,8 +18,11 @@ char* utf8_is_valid_n(const char *str, size_t len_bytes) _pure_; static inline char* utf8_is_valid(const char *str) { return utf8_is_valid_n(str, SIZE_MAX); } -char *ascii_is_valid(const char *s) _pure_; -char *ascii_is_valid_n(const char *str, size_t len); + +char* ascii_is_valid_n(const char *str, size_t len) _pure_; +static inline char* ascii_is_valid(const char *str) { + return ascii_is_valid_n(str, SIZE_MAX); +} int utf8_to_ascii(const char *str, char replacement_char, char **ret);