diff options
| author | Bill Rassieur <rassb@google.com> | 2019-04-02 18:46:58 +0000 |
|---|---|---|
| committer | Bill Rassieur <rassb@google.com> | 2019-04-02 18:46:58 +0000 |
| commit | 7a482c33d8ae661153a56c35101807f59c4fd712 (patch) | |
| tree | 9ac3a9090eae570eabd4be782195890a6002db4b | |
| parent | 98bcb8be07f00c2edf142ed28034211c8db8e9bc (diff) | |
| parent | d3f1df3865c2ce55923522bff3f089412c7bd0cc (diff) | |
| download | platform_system_tools_sysprop-7a482c33d8ae661153a56c35101807f59c4fd712.tar.gz platform_system_tools_sysprop-7a482c33d8ae661153a56c35101807f59c4fd712.tar.bz2 platform_system_tools_sysprop-7a482c33d8ae661153a56c35101807f59c4fd712.zip | |
Merge master@5428150 into git_qt-dev-plus-aosp.
Change-Id: I9d18f75b21dc8aba82fab16f13286b6ac6de8e61
BUG: 129345239
| -rw-r--r-- | CppGen.cpp | 44 | ||||
| -rw-r--r-- | tests/CppGenTest.cpp | 41 |
2 files changed, 49 insertions, 36 deletions
@@ -43,18 +43,18 @@ constexpr const char* kCppHeaderIncludes = )"; constexpr const char* kCppSourceIncludes = - R"(#include <cstring> -#include <iterator> -#include <type_traits> + R"(#include <cctype> +#include <cerrno> +#include <cstdio> +#include <cstring> +#include <limits> #include <utility> #include <strings.h> #include <sys/system_properties.h> -#include <android-base/logging.h> #include <android-base/parseint.h> -#include <android-base/stringprintf.h> -#include <android-base/strings.h> +#include <log/log.h> )"; @@ -80,14 +80,12 @@ template <> [[maybe_unused]] std::optional<bool> DoParse(const char* str) { template <> [[maybe_unused]] std::optional<std::int32_t> DoParse(const char* str) { std::int32_t ret; - bool success = android::base::ParseInt(str, &ret); - return success ? std::make_optional(ret) : std::nullopt; + return android::base::ParseInt(str, &ret) ? std::make_optional(ret) : std::nullopt; } template <> [[maybe_unused]] std::optional<std::int64_t> DoParse(const char* str) { std::int64_t ret; - bool success = android::base::ParseInt(str, &ret); - return success ? std::make_optional(ret) : std::nullopt; + return android::base::ParseInt(str, &ret) ? std::make_optional(ret) : std::nullopt; } template <> [[maybe_unused]] std::optional<double> DoParse(const char* str) { @@ -99,7 +97,7 @@ template <> [[maybe_unused]] std::optional<double> DoParse(const char* str) { return std::nullopt; } if (str == end || *end != '\0') { - errno = old_errno; + errno = EINVAL; return std::nullopt; } errno = old_errno; @@ -112,8 +110,16 @@ template <> [[maybe_unused]] std::optional<std::string> DoParse(const char* str) template <typename Vec> [[maybe_unused]] Vec DoParseList(const char* str) { Vec ret; - for (auto&& element : android::base::Split(str, ",")) { - ret.emplace_back(DoParse<typename Vec::value_type>(element.c_str())); + const char* p = str; + for (;;) { + const char* found = p; + while (*found != '\0' && *found != ',') { + ++found; + } + std::string value(p, found); + ret.emplace_back(DoParse<typename Vec::value_type>(value.c_str())); + if (*found == '\0') break; + p = found + 1; } return ret; } @@ -135,9 +141,10 @@ template <typename T> inline T TryParse(const char* str) { } [[maybe_unused]] std::string FormatValue(const std::optional<double>& value) { - return value - ? android::base::StringPrintf("%.*g", std::numeric_limits<double>::max_digits10, *value) - : ""; + if (!value) return ""; + char buf[1024]; + std::sprintf(buf, "%.*g", std::numeric_limits<double>::max_digits10, *value); + return buf; } [[maybe_unused]] std::string FormatValue(const std::optional<bool>& value) { @@ -347,9 +354,8 @@ std::string GenerateSource(const sysprop::Properties& props, writer.Write("}\n"); writer.Write( - "LOG(FATAL) << \"Invalid value \" << " - "static_cast<std::int32_t>(*value) << " - "\" for property \" << \"%s\";\n", + "LOG_ALWAYS_FATAL(\"Invalid value %%d for property %s\", " + "static_cast<std::int32_t>(*value));\n", prop.prop_name().c_str()); writer.Write("__builtin_unreachable();\n"); diff --git a/tests/CppGenTest.cpp b/tests/CppGenTest.cpp index 559ba18..f4de6e4 100644 --- a/tests/CppGenTest.cpp +++ b/tests/CppGenTest.cpp @@ -195,18 +195,18 @@ constexpr const char* kExpectedSourceOutput = #include <properties/PlatformProperties.sysprop.h> +#include <cctype> +#include <cerrno> +#include <cstdio> #include <cstring> -#include <iterator> -#include <type_traits> +#include <limits> #include <utility> #include <strings.h> #include <sys/system_properties.h> -#include <android-base/logging.h> #include <android-base/parseint.h> -#include <android-base/stringprintf.h> -#include <android-base/strings.h> +#include <log/log.h> namespace { @@ -241,7 +241,7 @@ std::string FormatValue(std::optional<test_enum_values> value) { return name; } } - LOG(FATAL) << "Invalid value " << static_cast<std::int32_t>(*value) << " for property " << "android.test.enum"; + LOG_ALWAYS_FATAL("Invalid value %d for property android.test.enum", static_cast<std::int32_t>(*value)); __builtin_unreachable(); } @@ -268,7 +268,7 @@ std::string FormatValue(std::optional<el_values> value) { return name; } } - LOG(FATAL) << "Invalid value " << static_cast<std::int32_t>(*value) << " for property " << "el"; + LOG_ALWAYS_FATAL("Invalid value %d for property el", static_cast<std::int32_t>(*value)); __builtin_unreachable(); } @@ -293,14 +293,12 @@ template <> [[maybe_unused]] std::optional<bool> DoParse(const char* str) { template <> [[maybe_unused]] std::optional<std::int32_t> DoParse(const char* str) { std::int32_t ret; - bool success = android::base::ParseInt(str, &ret); - return success ? std::make_optional(ret) : std::nullopt; + return android::base::ParseInt(str, &ret) ? std::make_optional(ret) : std::nullopt; } template <> [[maybe_unused]] std::optional<std::int64_t> DoParse(const char* str) { std::int64_t ret; - bool success = android::base::ParseInt(str, &ret); - return success ? std::make_optional(ret) : std::nullopt; + return android::base::ParseInt(str, &ret) ? std::make_optional(ret) : std::nullopt; } template <> [[maybe_unused]] std::optional<double> DoParse(const char* str) { @@ -312,7 +310,7 @@ template <> [[maybe_unused]] std::optional<double> DoParse(const char* str) { return std::nullopt; } if (str == end || *end != '\0') { - errno = old_errno; + errno = EINVAL; return std::nullopt; } errno = old_errno; @@ -325,8 +323,16 @@ template <> [[maybe_unused]] std::optional<std::string> DoParse(const char* str) template <typename Vec> [[maybe_unused]] Vec DoParseList(const char* str) { Vec ret; - for (auto&& element : android::base::Split(str, ",")) { - ret.emplace_back(DoParse<typename Vec::value_type>(element.c_str())); + const char* p = str; + for (;;) { + const char* found = p; + while (*found != '\0' && *found != ',') { + ++found; + } + std::string value(p, found); + ret.emplace_back(DoParse<typename Vec::value_type>(value.c_str())); + if (*found == '\0') break; + p = found + 1; } return ret; } @@ -348,9 +354,10 @@ template <typename T> inline T TryParse(const char* str) { } [[maybe_unused]] std::string FormatValue(const std::optional<double>& value) { - return value - ? android::base::StringPrintf("%.*g", std::numeric_limits<double>::max_digits10, *value) - : ""; + if (!value) return ""; + char buf[1024]; + std::sprintf(buf, "%.*g", std::numeric_limits<double>::max_digits10, *value); + return buf; } [[maybe_unused]] std::string FormatValue(const std::optional<bool>& value) { |
