diff options
author | Denis Kenzior <denkenz@gmail.com> | 2024-02-05 21:40:00 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2024-02-05 22:02:03 -0600 |
commit | 86c28534cd47934fcee63bbad80c64e1e1a47392 (patch) | |
tree | 947f5067d1ec44ff44e47c1eacb0e3294b7b93c5 | |
parent | d8a703340f1ea32a65af44fb1407acf55523628c (diff) |
utf8: Add l_ascii_strup
-rw-r--r-- | ell/ell.sym | 1 | ||||
-rw-r--r-- | ell/utf8.c | 32 | ||||
-rw-r--r-- | ell/utf8.h | 1 |
3 files changed, 34 insertions, 0 deletions
diff --git a/ell/ell.sym b/ell/ell.sym index a7fdbb90..2c207d60 100644 --- a/ell/ell.sym +++ b/ell/ell.sym @@ -50,6 +50,7 @@ global: /* utf8 */ l_ascii_table; l_ascii_strdown; + l_ascii_strup; l_utf8_get_codepoint; l_utf8_validate; l_utf8_strlen; @@ -75,6 +75,38 @@ LIB_EXPORT char *l_ascii_strdown(const char *str, ssize_t len) return ret; } +/** + * l_ascii_strup + * @str: a pointer to an ASCII string + * @len: maximum bytes to process or negative if string is null terminated + * + * Returns: Newly allocated string with all lower case characters converted + * to upper case. + **/ +LIB_EXPORT char *l_ascii_strup(const char *str, ssize_t len) +{ + size_t slen; + size_t i; + char *ret; + + if (!str) + return NULL; + + if (len < 0) + slen = strlen(str); + else + slen = minsize(strlen(str), (size_t) len); + + ret = l_malloc(slen + 1); + + for (i = 0; i < slen; i++) + ret[i] = l_ascii_toupper(str[i]); + + ret[i] = '\0'; + + return ret; +} + static inline bool __attribute__ ((always_inline)) valid_unicode(wchar_t c) { @@ -104,6 +104,7 @@ static inline __attribute__ ((always_inline)) char l_ascii_tolower(char c) } char *l_ascii_strdown(const char *str, ssize_t len); +char *l_ascii_strup(const char *str, ssize_t len); bool l_utf8_validate(const char *src, size_t len, const char **end); size_t l_utf8_strlen(const char *str); |