Index: uspace/lib/c/generic/io/klog.c
===================================================================
--- uspace/lib/c/generic/io/klog.c	(revision f43742e2319f2b70763dd51bbc6ef09fd8a86f2e)
+++ uspace/lib/c/generic/io/klog.c	(revision 9246016f2cd9a449613c5c8a7e45dcdc5c78a8f5)
@@ -42,18 +42,14 @@
 #include <abi/log.h>
 
-size_t klog_write(log_level_t lvl, const void *buf, size_t size)
+int klog_write(log_level_t lvl, const void *buf, size_t size)
 {
-	ssize_t ret = (ssize_t) __SYSCALL4(SYS_KLOG, KLOG_WRITE, (sysarg_t) buf,
+	return (int) __SYSCALL4(SYS_KLOG, KLOG_WRITE, (sysarg_t) buf,
 	    size, lvl);
-	
-	if (ret >= 0)
-		return (size_t) ret;
-	
-	return 0;
 }
 
-int klog_read(void *data, size_t size)
+int klog_read(void *data, size_t size, size_t *nread)
 {
-	return (int) __SYSCALL4(SYS_KLOG, KLOG_READ, (uintptr_t) data, size, 0);
+	return (int) __SYSCALL5(SYS_KLOG, KLOG_READ, (uintptr_t) data,
+	    size, 0, (sysarg_t) nread);
 }
 
Index: uspace/lib/c/include/io/klog.h
===================================================================
--- uspace/lib/c/include/io/klog.h	(revision f43742e2319f2b70763dd51bbc6ef09fd8a86f2e)
+++ uspace/lib/c/include/io/klog.h	(revision 9246016f2cd9a449613c5c8a7e45dcdc5c78a8f5)
@@ -44,6 +44,6 @@
 #include <abi/log.h>
 
-extern size_t klog_write(log_level_t, const void *, size_t);
-extern int klog_read(void *, size_t);
+extern int klog_write(log_level_t, const void *, size_t);
+extern int klog_read(void *, size_t, size_t *);
 
 #define KLOG_PRINTF(lvl, fmt, ...) ({ \
Index: uspace/srv/klog/klog.c
===================================================================
--- uspace/srv/klog/klog.c	(revision f43742e2319f2b70763dd51bbc6ef09fd8a86f2e)
+++ uspace/srv/klog/klog.c	(revision 9246016f2cd9a449613c5c8a7e45dcdc5c78a8f5)
@@ -100,13 +100,12 @@
 static void producer(void)
 {
-	int read = klog_read(buffer, BUFFER_SIZE);
-	
-	if (read < 0) {
-		log_msg(LOG_DEFAULT, LVL_ERROR, "klog_read failed, rc = %d",
-		    read);
+	size_t len = 0;
+	int rc = klog_read(buffer, BUFFER_SIZE, &len);
+	if (rc != EOK) {
+		log_msg(LOG_DEFAULT, LVL_ERROR, "klog_read failed, rc = %s",
+		    str_error_name(rc));
 		return;
 	}
 	
-	size_t len = read;
 	size_t offset = 0;
 	while (offset < len) {
