diff --git a/bootstat/boot_reason_test.sh b/bootstat/boot_reason_test.sh index f5d789cb6..603d04f67 100755 --- a/bootstat/boot_reason_test.sh +++ b/bootstat/boot_reason_test.sh @@ -408,29 +408,29 @@ validate_reason() { tr ' \f\t\r\n' '_____'` case ${var} in watchdog | watchdog,?* ) ;; - kernel_panic | kernel_panic,?*) ;; - recovery | recovery,?*) ;; - bootloader | bootloader,?*) ;; - cold | cold,?*) ;; - hard | hard,?*) ;; - warm | warm,?*) ;; - shutdown | shutdown,?*) ;; + kernel_panic | kernel_panic,?* ) ;; + recovery | recovery,?* ) ;; + bootloader | bootloader,?* ) ;; + cold | cold,?* ) ;; + hard | hard,?* ) ;; + warm | warm,?* ) ;; + shutdown | shutdown,?* ) ;; reboot,reboot | reboot,reboot,* ) var=${var#reboot,} ; var=${var%,} ;; reboot,cold | reboot,cold,* ) var=${var#reboot,} ; var=${var%,} ;; reboot,hard | reboot,hard,* ) var=${var#reboot,} ; var=${var%,} ;; reboot,warm | reboot,warm,* ) var=${var#reboot,} ; var=${var%,} ;; reboot,recovery | reboot,recovery,* ) var=${var#reboot,} ; var=${var%,} ;; reboot,bootloader | reboot,bootloader,* ) var=${var#reboot,} ; var=${var%,} ;; - reboot | reboot,?*) ;; + reboot | reboot,?* ) ;; # Aliases and Heuristics - *wdog* | *watchdog* ) var="watchdog" ;; - *powerkey* ) var="cold,powerkey" ;; - *panic* | *kernel_panic*) var="kernel_panic" ;; - *thermal*) var="shutdown,thermal" ;; - *s3_wakeup*) var="warm,s3_wakeup" ;; - *hw_reset*) var="hard,hw_reset" ;; - *bootloader*) var="bootloader" ;; - *) var="reboot" ;; + *wdog* | *watchdog* ) var="watchdog" ;; + *powerkey* | *power_key* | *PowerKey* ) var="cold,powerkey" ;; + *panic* | *kernel_panic* ) var="kernel_panic" ;; + *thermal* ) var="shutdown,thermal" ;; + *s3_wakeup* ) var="warm,s3_wakeup" ;; + *hw_reset* ) var="hard,hw_reset" ;; + *bootloader* ) var="bootloader" ;; + * ) var="reboot" ;; esac echo ${var} } diff --git a/bootstat/bootstat.cpp b/bootstat/bootstat.cpp index 4ba430ce3..5ca3bd4f6 100644 --- a/bootstat/bootstat.cpp +++ b/bootstat/bootstat.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -576,10 +577,16 @@ std::string BootReasonStrToReason(const std::string& boot_reason) { // A series of checks to take some officially unsupported reasons // reported by the bootloader and find some logical and canonical // sense. In an ideal world, we would require those bootloaders - // to behave and follow our standards. + // to behave and follow our CTS standards. + // + // first member is the output + // second member is an unanchored regex for an alias + // + // We match a needle on output. This helps keep the scale of the + // following table smaller. static const std::vector> aliasReasons = { {"watchdog", "wdog"}, - {"cold,powerkey", "powerkey"}, + {"cold,powerkey", "powerkey|power_key|PowerKey"}, {"kernel_panic", "panic"}, {"shutdown,thermal", "thermal"}, {"warm,s3_wakeup", "s3_wakeup"}, @@ -588,13 +595,12 @@ std::string BootReasonStrToReason(const std::string& boot_reason) { {"bootloader", ""}, }; - // Either the primary or alias is found _somewhere_ in the reason string. for (auto& s : aliasReasons) { if (reason.find(s.first) != std::string::npos) { ret = s.first; break; } - if (s.second.size() && (reason.find(s.second) != std::string::npos)) { + if (s.second.size() && std::regex_search(reason, std::regex(s.second))) { ret = s.first; break; }