Index: uspace/lib/c/generic/vfs/vfs.c
===================================================================
--- uspace/lib/c/generic/vfs/vfs.c	(revision c72561950ed237c5932e68065f808999e720da62)
+++ uspace/lib/c/generic/vfs/vfs.c	(revision 0b97336d11bcc58a2ceb2de62e7d789187fda193)
@@ -395,7 +395,8 @@
 	assert((((oflag & O_RDONLY) != 0) + ((oflag & O_WRONLY) != 0) + ((oflag & O_RDWR) != 0)) == 1);
 	
-	int ret = vfs_lookup(path, walk_flags(oflag) | WALK_REGULAR);
-	if (ret < 0) {
-		return ret;
+	int fd = vfs_lookup(path, walk_flags(oflag) | WALK_REGULAR);
+	if (fd < 0) {
+		errno = fd;
+		return -1;
 	}
 	
@@ -406,9 +407,9 @@
 		((oflag & O_APPEND) ? MODE_APPEND : 0);
 	
-	int rc = _vfs_open(ret, mode); 
+	int rc = _vfs_open(fd, mode); 
 	if (rc < 0) {
-		// _vfs_put(ret);
-		close(ret);
-		return rc;
+		close(fd);
+		errno = rc;
+		return -1;
 	}
 	
@@ -417,9 +418,8 @@
 		assert(!(oflag & O_APPEND));
 		
-		// _vfs_resize
-		(void) ftruncate(ret, 0);
-	}
-
-	return ret;
+		(void) ftruncate(fd, 0);
+	}
+
+	return fd;
 }
 
@@ -723,9 +723,16 @@
 	int fd = vfs_lookup(path, 0);
 	if (fd < 0) {
-		return fd;
+		errno = fd;
+		return -1;
 	}
 	
 	int rc = fstat(fd, stat);
-	close(fd);
+	if (rc != EOK) {
+		close(fd);
+		errno = rc;
+		rc = -1;
+	} else
+		rc = close(fd);
+
 	return rc;
 }
@@ -745,20 +752,20 @@
 	}
 	
-	int ret = vfs_lookup(dirname, WALK_DIRECTORY);
-	if (ret < 0) {
+	int fd = vfs_lookup(dirname, WALK_DIRECTORY);
+	if (fd < 0) {
 		free(dirp);
-		errno = ret;
+		errno = fd;
 		return NULL;
 	}
 	
-	int rc = _vfs_open(ret, MODE_READ);
+	int rc = _vfs_open(fd, MODE_READ);
 	if (rc < 0) {
 		free(dirp);
-		close(ret);
+		close(fd);
 		errno = rc;
 		return NULL;
 	}
 	
-	dirp->fd = ret;
+	dirp->fd = fd;
 	return dirp;
 }
@@ -818,11 +825,11 @@
 int mkdir(const char *path, mode_t mode)
 {
-	int ret = vfs_lookup(path, WALK_MUST_CREATE | WALK_DIRECTORY);
-	if (ret < 0) {
-		return ret;
-	}
-	
-	close(ret);
-	return EOK;
+	int fd = vfs_lookup(path, WALK_MUST_CREATE | WALK_DIRECTORY);
+	if (fd < 0) {
+		errno = fd;
+		return -1;
+	}
+	
+	return close(fd);
 }
 
@@ -858,5 +865,6 @@
 	char *pa = vfs_absolutize(path, &pa_size);
 	if (!pa) {
-		return ENOMEM;
+		errno = ENOMEM;
+		return -1;
 	}
 	
@@ -864,9 +872,15 @@
 	if (root < 0) {
 		free(pa);
-		return ENOENT;
+		errno = ENOENT;
+		return -1;
 	}
 	
 	int rc = _vfs_unlink2(root, pa, -1, 0);
 	
+	if (rc != EOK) {
+		errno = rc;
+		rc = -1;
+	}
+
 	free(pa);
 	close(root);
@@ -884,5 +898,6 @@
 	char *pa = vfs_absolutize(path, &pa_size);
 	if (!pa) {
-		return ENOMEM;
+		errno = ENOMEM;
+		return -1;
 	}
 	
@@ -890,8 +905,14 @@
 	if (root < 0) {
 		free(pa);
-		return ENOENT;
+		errno = ENOENT;
+		return -1;
 	}
 	
 	int rc = _vfs_unlink2(root, pa, -1, WALK_DIRECTORY);
+
+	if (rc != EOK) {
+		errno = rc;
+		rc = -1;
+	}
 	
 	free(pa);
@@ -933,5 +954,6 @@
 		free(olda);
 		free(newa);
-		return ENOENT;
+		errno = ENOENT;
+		return -1;
 	}
 	
@@ -1000,6 +1022,8 @@
 	size_t abs_size;
 	char *abs = vfs_absolutize(path, &abs_size);
-	if (!abs)
-		return ENOMEM;
+	if (!abs) {
+		errno = ENOMEM;
+		return -1;
+	}
 	
 	int fd = vfs_lookup(abs, WALK_DIRECTORY);
@@ -1134,5 +1158,5 @@
 	dir = opendir(path);
 	if (!dir)
-		return -1;
+		return ENOENT;
 
 	while ((dirent = readdir(dir)) != NULL) {
@@ -1144,6 +1168,5 @@
 		if (rc < 0) {
 			closedir(dir);
-			errno = rc;
-			return -1;
+			return rc;
 		}
 
@@ -1152,6 +1175,5 @@
 			free(child);
 			closedir(dir);
-			errno = rc;
-			return -1;
+			return rc;
 		}
 
