Pull log naming code out of binary_log_writer and use in new logger

Flatbuffer logs will now be at /media/sda1/fbs_log-XYZ.

Change-Id: I7cfbc797cf8da415ff065387bf1867885c67c65d
diff --git a/aos/logging/binary_log_writer.cc b/aos/logging/binary_log_writer.cc
index 5b1dc38..d4dea64 100644
--- a/aos/logging/binary_log_writer.cc
+++ b/aos/logging/binary_log_writer.cc
@@ -18,6 +18,7 @@
 #include "aos/die.h"
 #include "aos/logging/binary_log_file.h"
 #include "aos/logging/implementations.h"
+#include "aos/logging/log_namer.h"
 #include "aos/time/time.h"
 #include "aos/configuration.h"
 #include "aos/init.h"
@@ -28,141 +29,14 @@
 namespace linux_code {
 namespace {
 
-void AllocateLogName(char **filename, const char *directory) {
-  int fileindex = 0;
-  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 {
-        AOS_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);
-
-  char previous[512];
-  ::std::string path = ::std::string(directory) + "/aos_log-current";
-  ssize_t len = ::readlink(path.c_str(), previous, sizeof(previous));
-  if (len != -1) {
-    previous[len] = '\0';
-  } else {
-    previous[0] = '\0';
-    AOS_LOG(INFO, "Could not find aos_log-current\n");
-    printf("Could not find aos_log-current\n");
-  }
-  if (asprintf(filename, "%s/aos_log-%03d", directory, fileindex) == -1) {
-    PDie("couldn't create final name");
-  }
-  AOS_LOG(INFO,
-          "Created log file (aos_log-%d) in directory (%s). Previous file "
-          "was (%s).\n",
-          fileindex, directory, previous);
-  printf("Created log file (aos_log-%d) in directory (%s). Previous file was "
-         "(%s).\n",
-         fileindex, directory, previous);
-}
-
-#ifdef AOS_ARCHITECTURE_arm_frc
-bool FoundThumbDrive(const char *path) {
-  FILE *mnt_fp = setmntent("/etc/mtab", "r");
-  if (mnt_fp == nullptr) {
-    Die("Could not open /etc/mtab");
-  }
-
-  bool found = false;
-  struct mntent mntbuf;
-  char buf[256];
-  while (!found) {
-    struct mntent *mount_list = getmntent_r(mnt_fp, &mntbuf, buf, sizeof(buf));
-    if (mount_list == nullptr) {
-      break;
-    }
-    if (strcmp(mount_list->mnt_dir, path) == 0) {
-      found = true;
-    }
-  }
-  endmntent(mnt_fp);
-  return found;
-}
-
-bool FindDevice(char *device, size_t device_size) {
-  char test_device[10];
-  for (char i = 'a'; i < 'z'; ++i) {
-    snprintf(test_device, sizeof(test_device), "/dev/sd%c", i);
-    AOS_LOG(INFO, "Trying to access %s\n", test_device);
-    if (access(test_device, F_OK) != -1) {
-      snprintf(device, device_size, "sd%c", i);
-      return true;
-    }
-  }
-  return false;
-}
-#endif
-
 int BinaryLogReaderMain() {
   InitNRT();
 
-#ifdef AOS_ARCHITECTURE_arm_frc
-  char folder[128];
-
-  {
-    char dev_name[8];
-    while (!FindDevice(dev_name, sizeof(dev_name))) {
-      AOS_LOG(INFO, "Waiting for a device\n");
-      printf("Waiting for a device\n");
-      sleep(5);
-    }
-    snprintf(folder, sizeof(folder), "/media/%s1", dev_name);
-    while (!FoundThumbDrive(folder)) {
-      AOS_LOG(INFO, "Waiting for %s\n", folder);
-      printf("Waiting for %s\n", folder);
-      sleep(1);
-    }
-    snprintf(folder, sizeof(folder), "/media/%s1/", dev_name);
-  }
-
-  if (access(folder, F_OK) == -1) {
-#else
-  const char *folder = configuration::GetLoggingDirectory();
-  if (access(folder, R_OK | W_OK) == -1) {
-#endif
-    AOS_LOG(FATAL, "folder '%s' does not exist. please create it\n", folder);
-  }
-  AOS_LOG(INFO, "logging to folder '%s'\n", folder);
-
-  char *tmp;
-  AllocateLogName(&tmp, folder);
-  char *tmp2;
-  if (asprintf(&tmp2, "%s/aos_log-current", folder) == -1) {
-    AOS_PLOG(WARNING, "couldn't create current symlink name");
-  } else {
-    if (unlink(tmp2) == -1 && (errno != EROFS && errno != ENOENT)) {
-      AOS_LOG(WARNING, "unlink('%s') failed", tmp2);
-    }
-    if (symlink(tmp, tmp2) == -1) {
-      AOS_PLOG(WARNING, "symlink('%s', '%s') failed", tmp, tmp2);
-    }
-    free(tmp2);
-  }
-  int fd = open(tmp, O_SYNC | O_APPEND | O_RDWR | O_CREAT,
+  const std::string file_name = GetLogName("aos_log");
+  int fd = open(file_name.c_str(), O_SYNC | O_APPEND | O_RDWR | O_CREAT,
                 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
-  free(tmp);
   if (fd == -1) {
-    AOS_PLOG(FATAL, "opening file '%s' failed", tmp);
+    AOS_PLOG(FATAL, "opening file '%s' failed", file_name.c_str());
   }
   LogFileWriter writer(fd);