--- libc/misc/dirent/readdir_r.c
+++ libc/misc/dirent/readdir_r.c
@@ -16,7 +16,6 @@
 	    __set_errno(EBADF);
 	    return(EBADF);
 	}
-	de = NULL;
 
 #ifdef __UCLIBC_HAS_THREADS__
 	__pthread_mutex_lock(&(dir->dd_lock));
@@ -27,8 +26,9 @@
 		/* read dir->dd_max bytes of directory entries. */
 		bytes = __getdents(dir->dd_fd, dir->dd_buf, dir->dd_max);
 		if (bytes <= 0) {
+		    de = NULL;
 		    *result = NULL;
-		    ret = errno;
+		    ret = (bytes==0)? 0 : errno;
 		    goto all_done;
 		}
 		dir->dd_size = bytes;
--- libc/misc/dirent/readdir64_r.c
+++ libc/misc/dirent/readdir64_r.c
@@ -30,7 +30,6 @@
 	    __set_errno(EBADF);
 	    return(EBADF);
 	}
-	de = NULL;
 
 #ifdef __UCLIBC_HAS_THREADS__
 	__pthread_mutex_lock(&(dir->dd_lock));
@@ -41,8 +40,9 @@
 		/* read dir->dd_max bytes of directory entries. */
 		bytes = __getdents64(dir->dd_fd, dir->dd_buf, dir->dd_max);
 		if (bytes <= 0) {
+		    de = NULL;
 		    *result = NULL;
-		    ret = errno;
+		    ret = (bytes==0)? 0 : errno;
 		    goto all_done;
 		}
 		dir->dd_size = bytes;
