fixed using readdir(3) wrong
diff --git a/aos/linux_code/logging/binary_log_writer.cc b/aos/linux_code/logging/binary_log_writer.cc
index 0013dd4..4d981ee 100644
--- a/aos/linux_code/logging/binary_log_writer.cc
+++ b/aos/linux_code/logging/binary_log_writer.cc
@@ -62,21 +62,29 @@
 
 void AllocateLogName(char **filename, const char *directory) {
   int fileindex = 0;
-  DIR *d;
-  if ((d = opendir(directory))) {
-    int index = 0;
-    struct dirent *dir;
-    while ((dir = readdir(d)) != NULL) {
+  DIR *const d = opendir(directory);
+  if (d == nullptr) {
+    PDie("could not open directory %s", directory);
+  }
+  int index = 0;
+  while (true) {
+    errno = 0;
+    struct dirent *const dir = readdir(d);
+    if (dir == nullptr) {
+      if (errno == 0) {
+        break;
+      } else {
+        PLOG(FATAL, "readdir(%p) failed", d);
+      }
+    } else {
       if (sscanf(dir->d_name, "aos_log-%d", &index) == 1) {
         if (index >= fileindex) {
           fileindex = index + 1;
         }
       }
     }
-    closedir(d);
-  } else {
-    PDie("could not open directory %s", directory);
   }
+  closedir(d);
 
   char previous[512];
   ::std::string path = ::std::string(directory) + "/aos_log-current";