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