Index: uspace/lib/c/generic/str.c
===================================================================
--- uspace/lib/c/generic/str.c	(revision 2d0d6373128f1eef9605f0cbe483be6603f38da8)
+++ uspace/lib/c/generic/str.c	(revision 61e29a4d8efba82fa65ab85c056b80f308ccfb5b)
@@ -366,4 +366,16 @@
 }
 
+/** Check whether wide string is plain ASCII.
+ *
+ * @return True if wide string is plain ASCII.
+ *
+ */
+bool wstr_is_ascii(const wchar_t *wstr)
+{
+	while (*wstr && ascii_check(*wstr))
+		wstr++;
+	return *wstr == 0;
+}
+
 /** Check whether character is valid
  *
@@ -552,7 +564,10 @@
  * @param size	Size of the destination buffer.
  * @param src	Source wide string.
- */
-void wstr_to_str(char *dest, size_t size, const wchar_t *src)
-{
+ *
+ * @return EOK, if success, negative otherwise.
+ */
+int wstr_to_str(char *dest, size_t size, const wchar_t *src)
+{
+	int rc;
 	wchar_t ch;
 	size_t src_idx;
@@ -566,9 +581,11 @@
 
 	while ((ch = src[src_idx++]) != 0) {
-		if (chr_encode(ch, dest, &dest_off, size - 1) != EOK)
+		rc = chr_encode(ch, dest, &dest_off, size - 1);
+		if (rc != EOK)
 			break;
 	}
 
 	dest[dest_off] = '\0';
+	return rc;
 }
 
@@ -631,7 +648,10 @@
  * @param dlen	Length of destination buffer (number of wchars).
  * @param src	Source string.
- */
-void str_to_wstr(wchar_t *dest, size_t dlen, const char *src)
-{
+ *
+ * @return EOK, if success, negative otherwise.
+ */
+int str_to_wstr(wchar_t *dest, size_t dlen, const char *src)
+{
+	int rc=EOK;
 	size_t offset;
 	size_t di;
@@ -644,6 +664,8 @@
 
 	do {
-		if (di >= dlen - 1)
+		if (di >= dlen - 1) {
+			rc = EOVERFLOW;
 			break;
+		}
 
 		c = str_decode(src, &offset, STR_NO_LIMIT);
@@ -652,4 +674,5 @@
 
 	dest[dlen - 1] = '\0';
+	return rc;
 }
 
Index: uspace/lib/c/include/str.h
===================================================================
--- uspace/lib/c/include/str.h	(revision 2d0d6373128f1eef9605f0cbe483be6603f38da8)
+++ uspace/lib/c/include/str.h	(revision 61e29a4d8efba82fa65ab85c056b80f308ccfb5b)
@@ -65,4 +65,5 @@
 extern bool ascii_check(wchar_t ch);
 extern bool chr_check(wchar_t ch);
+extern bool wstr_is_ascii(const wchar_t *wstr);
 
 extern int str_cmp(const char *s1, const char *s2);
@@ -73,7 +74,7 @@
 extern void str_append(char *dest, size_t size, const char *src);
 
-extern void wstr_to_str(char *dest, size_t size, const wchar_t *src);
+extern int wstr_to_str(char *dest, size_t size, const wchar_t *src);
 extern char *wstr_to_astr(const wchar_t *src);
-extern void str_to_wstr(wchar_t *dest, size_t dlen, const char *src);
+extern int str_to_wstr(wchar_t *dest, size_t dlen, const char *src);
 
 extern char *str_chr(const char *str, wchar_t ch);
