Index: kernel/generic/src/lib/string.c
===================================================================
--- kernel/generic/src/lib/string.c	(revision e1813cf4114a4d3ec284d7ebb2533fb7ce78e6fd)
+++ kernel/generic/src/lib/string.c	(revision 1b0b48e09eab2e821aca4d6f6b078ce38136134f)
@@ -200,35 +200,33 @@
 }
 
-/** Get bytes used by UTF-8 characters.
- *
- * Get the number of bytes (count of plain characters) which
- * are used by a given count of UTF-8 characters in a string.
- * As UTF-8 encoding is multibyte, there is no constant
- * correspondence between number of characters and used bytes.
- *
- * @param str   UTF-8 string to consider.
- * @param count Number of UTF-8 characters to count.
+/** Get size of string, with length limit.
+ *
+ * Get the number of bytes which are used by up to @a max_len first
+ * characters in the string @a str. If @a max_len is greater than
+ * the length of @a str, the entire string is measured.
+ *
+ * @param str   String to consider.
+ * @param count Maximum number of characters to measure.
  *
  * @return Number of bytes used by the characters.
- *
- */
-size_t utf8_count_bytes(const char *str, count_t count)
-{
-	size_t size = 0;
-	index_t index = 0;
-	index_t iprev;
+ */
+size_t str_lsize(const char *str, count_t max_len)
+{
+	count_t len = 0;
+	size_t cur = 0;
+	size_t prev;
 	wchar_t ch;
-	
+
 	while (true) {
-		iprev = index;
-		if (size >= count)
+		prev = cur;
+		if (len >= max_len)
 			break;
-		ch = chr_decode(str, &index, UTF8_NO_LIMIT);
+		ch = chr_decode(str, &cur, UTF8_NO_LIMIT);
 		if (ch == '\0') break;
 
-		size++;
-	}
-	
-	return iprev;
+		len++;
+	}
+
+	return prev;
 }
 
@@ -263,5 +261,5 @@
  * @param str NULL-terminated string.
  *
- * @return Number of characters in str.
+ * @return Number of characters in @a str.
  *
  */
@@ -274,36 +272,35 @@
 }
 
-/** Return number of UTF-8 characters in a string.
- *
- * @param str NULL-terminated UTF-8 string.
- *
- * @return Number of UTF-8 characters in str.
- *
- */
-size_t strlen_utf8(const char *str)
-{
-	size_t size = 0;
-	index_t index = 0;
-	
-	while (chr_decode(str, &index, UTF8_NO_LIMIT) != 0) {
-		size++;
-	}
-	
-	return size;
-}
-
-/** Return number of UTF-32 characters in a string.
- *
- * @param str NULL-terminated UTF-32 string.
- *
- * @return Number of UTF-32 characters in str.
- *
- */
-size_t strlen_utf32(const wchar_t *str)
-{
-	size_t size;
-	for (size = 0; str[size]; size++);
-	
-	return size;
+/** Return number of characters in a string.
+ *
+ * @param str NULL-terminated string.
+ * @return Number of characters in string.
+ */
+count_t str_length(const char *str)
+{
+	count_t len = 0;
+	size_t offset = 0;
+
+	while (chr_decode(str, &offset, UTF8_NO_LIMIT) != 0) {
+		len++;
+	}
+
+	return len;
+}
+
+/** Return number of characters in a wide string.
+ *
+ * @param str NULL-terminated wide string.
+ * @return Number of characters in @a str.
+ */
+count_t wstr_length(const wchar_t *wstr)
+{
+	count_t len;
+
+	len = 0;
+	while (*wstr++ != '\0')
+		++len;
+
+	return len;
 }
 
