Index: uspace/lib/libc/generic/vfs.c
===================================================================
--- uspace/lib/libc/generic/vfs.c	(revision d0dc74ae846022e40c805de4afc43e32bbc9b34f)
+++ uspace/lib/libc/generic/vfs.c	(revision 5973fd0e3fba22d883e191eaf2eb0c640098d526)
@@ -244,9 +244,8 @@
 		return NULL;
 	dirp->fd = open(dirname, 0);	/* TODO: must be a directory */
-	if (!dirp->fd) {
+	if (dirp->fd < 0) {
 		free(dirp);
 		return NULL;
 	}
-	dirp->pos = 0;
 	return dirp;
 }
@@ -254,10 +253,13 @@
 struct dirent *readdir(DIR *dirp)
 {
-	return NULL;	/* TODO */	
+	ssize_t len = read(dirp->fd, &dirp->res.d_name[0], NAME_MAX + 1);
+	if (len <= 0)
+		return NULL;
+	return &dirp->res;
 }
 
 void rewinddir(DIR *dirp)
 {
-	dirp->pos = 0;
+	(void) lseek(dirp->fd, 0, SEEK_SET);
 }
 
Index: uspace/lib/libc/include/dirent.h
===================================================================
--- uspace/lib/libc/include/dirent.h	(revision d0dc74ae846022e40c805de4afc43e32bbc9b34f)
+++ uspace/lib/libc/include/dirent.h	(revision 5973fd0e3fba22d883e191eaf2eb0c640098d526)
@@ -44,5 +44,4 @@
 typedef struct {
 	int fd;
-	unsigned pos;
 	struct dirent res;
 } DIR;
