diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-06-09 13:41:24 +0200 |
---|---|---|
committer | Sven Eden <yamakuzure@gmx.net> | 2018-08-24 16:47:08 +0200 |
commit | e62e8b3d2e9ac7f1e1a13578eb989f751b6c94ae (patch) | |
tree | f83f27e0ff03a45694311ae3977c5543ad91b37c /src/basic | |
parent | 3cec34a443c76e06a21f0be01ce9eac936c8a6d4 (diff) |
basic/utf8: add ascii_is_valid_n()
Diffstat (limited to 'src/basic')
-rw-r--r-- | src/basic/utf8.c | 18 | ||||
-rw-r--r-- | src/basic/utf8.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/src/basic/utf8.c b/src/basic/utf8.c index 1e86949a4..af86f74d1 100644 --- a/src/basic/utf8.c +++ b/src/basic/utf8.c @@ -247,6 +247,9 @@ char *utf8_escape_non_printable(const char *str) { char *ascii_is_valid(const char *str) { const char *p; + /* Check whether the string consists of valid ASCII bytes, + * i.e values between 0 and 127, inclusive. */ + assert(str); for (p = str; *p; p++) @@ -256,6 +259,21 @@ char *ascii_is_valid(const char *str) { return (char*) str; } +char *ascii_is_valid_n(const char *str, size_t len) { + size_t i; + + /* Very similar to ascii_is_valid(), but checks exactly len + * bytes and rejects any NULs in that range. */ + + assert(str); + + for (i = 0; i < len; i++) + if ((unsigned char) str[i] >= 128 || str[i] == 0) + return NULL; + + return (char*) str; +} + /** * utf8_encode_unichar() - Encode single UCS-4 character as UTF-8 * @out_utf8: output buffer of at least 4 bytes or NULL diff --git a/src/basic/utf8.h b/src/basic/utf8.h index 7d68105a0..d6936ea46 100644 --- a/src/basic/utf8.h +++ b/src/basic/utf8.h @@ -22,6 +22,7 @@ bool unichar_is_valid(char32_t c); const char *utf8_is_valid(const char *s) _pure_; char *ascii_is_valid(const char *s) _pure_; +char *ascii_is_valid_n(const char *str, size_t len); bool utf8_is_printable_newline(const char* str, size_t length, bool newline) _pure_; #define utf8_is_printable(str, length) utf8_is_printable_newline(str, length, true) |