Add nonblocking version of GetLogName

Signed-off-by: Ravago Jones <ravagojones@gmail.com>
Change-Id: Ie91ac315bf659c4a85de1afe4fe6198c26ae747c
diff --git a/aos/logging/log_namer.cc b/aos/logging/log_namer.cc
index dfebe44..ed57caa 100644
--- a/aos/logging/log_namer.cc
+++ b/aos/logging/log_namer.cc
@@ -111,19 +111,19 @@
 
 }  // namespace
 
-std::string GetLogName(const char *basename) {
+std::optional<std::string> MaybeGetLogName(const char *basename) {
   if (FLAGS_logging_folder.empty()) {
     char folder[128];
     {
       char dev_name[8];
-      while (!FindDevice(dev_name, sizeof(dev_name))) {
+      if (!FindDevice(dev_name, sizeof(dev_name))) {
         LOG(INFO) << "Waiting for a device";
-        sleep(5);
+        return std::nullopt;
       }
       snprintf(folder, sizeof(folder), "/media/%s1", dev_name);
-      while (!FoundThumbDrive(folder)) {
+      if (!FoundThumbDrive(folder)) {
         LOG(INFO) << "Waiting for" << folder;
-        sleep(1);
+        return std::nullopt;
       }
       snprintf(folder, sizeof(folder), "/media/%s1/", dev_name);
     }
@@ -164,5 +164,21 @@
   return log_base_name;
 }
 
+std::string GetLogName(const char *basename) {
+  std::optional<std::string> log_base_name;
+
+  while (true) {
+    log_base_name = MaybeGetLogName(basename);
+
+    if (log_base_name.has_value()) {
+      break;
+    }
+
+    sleep(5);
+  }
+
+  return log_base_name.value();
+}
+
 }  // namespace logging
 }  // namespace aos