summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/utf8.c18
-rw-r--r--utils/utf8.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/utils/utf8.c b/utils/utf8.c
index b4e308044..885ca94ee 100644
--- a/utils/utf8.c
+++ b/utils/utf8.c
@@ -118,6 +118,24 @@ size_t utf8_bounded_length(const char *s, size_t l)
}
/**
+ * Calculate the length (in bytes) of a bounded UTF-8 string
+ *
+ * \param s The string
+ * \param l Maximum length of input (in bytes)
+ * \param c Maximum number of characters to measure
+ * \return Length of string, in bytes
+ */
+size_t utf8_bounded_byte_length(const char *s, size_t l, size_t c)
+{
+ size_t len = 0;
+
+ while (len < l && c-- > 0)
+ len = utf8_next(s, l, len);
+
+ return len;
+}
+
+/**
* Calculate the length (in bytes) of a UTF-8 character
*
* \param s Pointer to start of character
diff --git a/utils/utf8.h b/utils/utf8.h
index 26234f6c0..eb043c227 100644
--- a/utils/utf8.h
+++ b/utils/utf8.h
@@ -37,6 +37,7 @@ size_t utf8_from_ucs4(uint32_t c, char *s);
size_t utf8_length(const char *s);
size_t utf8_bounded_length(const char *s, size_t l);
+size_t utf8_bounded_byte_length(const char *s, size_t l, size_t c);
size_t utf8_char_byte_length(const char *s);