Index: kernel/generic/src/console/kconsole.c
===================================================================
--- kernel/generic/src/console/kconsole.c	(revision c8bf88d737f715dd3bf256ec6f8bf31e0d3be7e1)
+++ kernel/generic/src/console/kconsole.c	(revision a7b10710077af5495dbbd8a18f1fb413be7dc5c2)
@@ -510,5 +510,5 @@
 		prev = offset;
 	}
-	*end = offset;
+	*end = prev;
 	
 	return found_start;
Index: kernel/generic/src/lib/string.c
===================================================================
--- kernel/generic/src/lib/string.c	(revision c8bf88d737f715dd3bf256ec6f8bf31e0d3be7e1)
+++ kernel/generic/src/lib/string.c	(revision a7b10710077af5495dbbd8a18f1fb413be7dc5c2)
@@ -459,16 +459,14 @@
 int str_cmp(const char *s1, const char *s2)
 {
-	wchar_t c1;
-	wchar_t c2;
+	wchar_t c1 = 0;
+	wchar_t c2 = 0;
 	
 	size_t off1 = 0;
 	size_t off2 = 0;
-	
-	while ((c1 = str_decode(s1, &off1, STR_NO_LIMIT) != 0)
-	    && (c2 = str_decode(s2, &off2, STR_NO_LIMIT) != 0)) {
-		
-		if (off1 != off2)
-			break;
-		
+
+	while (true) {
+		c1 = str_decode(s1, &off1, STR_NO_LIMIT);
+		c2 = str_decode(s2, &off2, STR_NO_LIMIT);
+
 		if (c1 < c2)
 			return -1;
@@ -476,13 +474,10 @@
 		if (c1 > c2)
 			return 1;
-	}
-	
-	if ((off1 == off2) && (c1 == c2))
-		return 0;
-	
-	if ((c1 == 0) || (off1 < off2))
-		return -1;
-	
-	return 1;
+
+		if (c1 == 0 || c2 == 0)
+			break;		
+	}
+
+	return 0;
 }
 
@@ -510,28 +505,26 @@
 	
 	count_t len = 0;
-	
-	while ((len < max_len)
-	    && ((c1 = str_decode(s1, &off1, STR_NO_LIMIT)) != 0)
-	    && ((c2 = str_decode(s2, &off2, STR_NO_LIMIT)) != 0)) {
-		
-		if (off1 != off2)
+
+	while (true) {
+		if (len >= max_len)
 			break;
-		
+
+		c1 = str_decode(s1, &off1, STR_NO_LIMIT);
+		c2 = str_decode(s2, &off2, STR_NO_LIMIT);
+
 		if (c1 < c2)
 			return -1;
-		
+
 		if (c1 > c2)
 			return 1;
-		
-		len++;
-	}
-	
-	if ((off1 == off2) && (len == max_len) && (c1 == c2))
-		return 0;
-	
-	if ((c1 == 0) || (off1 < off2))
-		return -1;
-	
-	return 1;
+
+		if (c1 == 0 || c2 == 0)
+			break;
+
+		++len;	
+	}
+
+	return 0;
+
 }
 
@@ -559,5 +552,5 @@
 	size_t dst_off = 0;
 	
-	while ((ch = str_decode(src, &str_off, STR_NO_LIMIT) != 0)) {
+	while ((ch = str_decode(src, &str_off, STR_NO_LIMIT)) != 0) {
 		if (chr_encode(ch, dst, &dst_off, size) != EOK)
 			break;
@@ -617,5 +610,5 @@
 	size_t off = 0;
 	
-	while ((acc = str_decode(str, &off, STR_NO_LIMIT) != 0)) {
+	while ((acc = str_decode(str, &off, STR_NO_LIMIT)) != 0) {
 		if (acc == ch)
 			return (str + off);
