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
diff --git a/aos/logging/log_namer.h b/aos/logging/log_namer.h
index 72abf12..44e93bf 100644
--- a/aos/logging/log_namer.h
+++ b/aos/logging/log_namer.h
@@ -2,6 +2,7 @@
 #define AOS_LOGGING_LOG_NAMER_H_
 
 #include <string>
+#include <optional>
 
 namespace aos {
 namespace logging {
@@ -13,6 +14,11 @@
 // the form "/media/sda1/abc-123" and setup a symlink pointing to it at
 // "/media/sda1/abc-current".
 std::string GetLogName(const char *basename);
+
+// A nonblocking variant of GetLogName that you can poll instead of blocking for
+// the usb drive.
+std::optional<std::string> MaybeGetLogName(const char *basename);
+
 }  // namespace logging
 }  // namespace aos