Index: uspace/srv/fs/ext2fs/ext2fs_ops.c
===================================================================
--- uspace/srv/fs/ext2fs/ext2fs_ops.c	(revision a210bc7f03bff23d5457c2c49d2fdb03b7c79cce)
+++ uspace/srv/fs/ext2fs/ext2fs_ops.c	(revision 84226f08911bd7c43fa1489fdd2d0ae646108869)
@@ -76,4 +76,5 @@
 static void ext2fs_read_file(ipc_callid_t, ipc_callid_t, aoff64_t,
 	size_t, ext2fs_instance_t *, ext2_inode_ref_t *);
+static bool ext2fs_is_dots(const uint8_t *, size_t);
 
 /*
@@ -337,4 +338,5 @@
 	int rc;
 	bool found = false;
+	size_t name_size;
 
 	fs = enode->instance->filesystem;
@@ -356,6 +358,10 @@
 	while (it.current != NULL) {
 		if (it.current->inode != 0) {
-			found = true;
-			break;
+			name_size = ext2_directory_entry_ll_get_name_length(fs->superblock,
+				it.current);
+			if (!ext2fs_is_dots(&it.current->name, name_size)) {
+				found = true;
+				break;
+			}
 		}
 		
@@ -625,4 +631,19 @@
 }
 
+/**
+ * Determine whether given directory entry name is . or ..
+ */
+bool ext2fs_is_dots(const uint8_t *name, size_t name_size) {
+	if (name_size == 1 && name[0] == '.') {
+		return true;
+	}
+	
+	if (name_size == 2 && name[0] == '.' && name[1] == '.') {
+		return true;
+	}
+	
+	return false;
+}
+
 void ext2fs_read_directory(ipc_callid_t rid, ipc_callid_t callid, aoff64_t pos,
 	size_t size, ext2fs_instance_t *inst, ext2_inode_ref_t *inode_ref)
@@ -657,11 +678,6 @@
 		
 		// skip . and ..
-		if ((name_size == 1 || name_size == 2) && it.current->name == '.') {
-			if (name_size == 1) {
-				goto skip;
-			}
-			else if (name_size == 2 && *(&it.current->name+1) == '.') {
-				goto skip;
-			}
+		if (ext2fs_is_dots(&it.current->name, name_size)) {
+			goto skip;
 		}
 		
