summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2013-03-17 22:01:42 +0000
committerMichael Drake <tlsa@netsurf-browser.org>2013-03-17 22:01:42 +0000
commitc3f21572ed18b9319aeba0fc5caf4a6394fd3905 (patch)
tree761308ff1d2c8b03396f84fbc2e6b51f52654798
parentc205378a8df1c3b099adf2436e2eacd16d070bb6 (diff)
downloadnetsurf-c3f21572ed18b9319aeba0fc5caf4a6394fd3905.tar.gz
netsurf-c3f21572ed18b9319aeba0fc5caf4a6394fd3905.tar.bz2
Add function to get the byte length of n characters in a utf8 string.
-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);