From 7400ff5f82bf5d4983b61e6b511b99a70c6c0475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=8F=8B=E6=9D=BE?= Date: Tue, 17 Dec 2024 18:44:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9stoi=E6=96=B9=E6=B3=95=20?= =?UTF-8?q?Signed-off-by:=20=E9=82=B9=E5=8F=8B=E6=9D=BE=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ability/utils/include/string_utils.h | 42 +++++++++++++++++++ .../mode/src/firmware_download_mode.cpp | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/foundations/ability/utils/include/string_utils.h b/foundations/ability/utils/include/string_utils.h index a29aa53a..2f40ade9 100644 --- a/foundations/ability/utils/include/string_utils.h +++ b/foundations/ability/utils/include/string_utils.h @@ -17,6 +17,7 @@ #define STRING_UTILS_H #include +#include #include #include #include @@ -25,6 +26,15 @@ namespace OHOS { namespace UpdateEngine { + +enum class StrCnvResult { + SUCCESS, + FAILED, + INVALID_CHAR, + NUMBER_FORMAT_ERROR, + SPILL_OVER, +}; + class StringUtils { public: // trim from start (in place) @@ -129,6 +139,38 @@ public: } return; } + + template [[maybe_unused]] static StrCnvResult DecStringToNumber(const std::string &str, T &number) + { + constexpr int numberBase = 10; + return StringToNumberInner(str, number, numberBase); + } + +private: + template + [[maybe_unused]] static StrCnvResult StringToNumberInner(const std::string &str, T &number, int base) + { + T numTemp; + std::string strTemp = str; + Trim(strTemp); + auto result = std::from_chars(strTemp.data(), strTemp.data() + strTemp.size(), numTemp, base); + if (result.ec == std::errc::result_out_of_range) { + return StrCnvResult::SPILL_OVER; + } + if (result.ec != std::errc()) { + return StrCnvResult::FAILED; + } + number = numTemp; + //判断字符串是否含有特殊字符 例如"100a" + if (result.ptr != strTemp.data() + strTemp.size()) { + return StrCnvResult::INVALID_CHAR; + } + // 防止字符串前后空格导致解析错误,使得数据可以解析,是否使用由调用者自己判断 + if (strTemp.size() != str.size()) { + return StrCnvResult::NUMBER_FORMAT_ERROR; + } + return StrCnvResult::SUCCESS; + } }; } // namespace UpdateEngine } // namespace OHOS diff --git a/services/firmware/upgrade/mode/src/firmware_download_mode.cpp b/services/firmware/upgrade/mode/src/firmware_download_mode.cpp index 31690471..d2b4c70e 100644 --- a/services/firmware/upgrade/mode/src/firmware_download_mode.cpp +++ b/services/firmware/upgrade/mode/src/firmware_download_mode.cpp @@ -102,7 +102,7 @@ FirmwareStep FirmwareDownloadMode::GetStepAfterDownload() } ErrorMessage errorMessage; if (!downloadDataProcessor_.GetDownloadProgress().endReason.empty()) { - errorMessage.errorCode = stoi(downloadDataProcessor_.GetDownloadProgress().endReason); + StringUtils::DecStringToNumber(downloadDataProcessor_.GetDownloadProgress().endReason, errorMessage.errorCode); } FirmwareStep nextStep = FirmwareStep::COMPLETE; switch (task.status) { -- Gitee From fcb6af2993b80f113512a85cdd38015103b73d4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=8F=8B=E6=9D=BE?= Date: Tue, 17 Dec 2024 11:17:59 +0000 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邹友松 --- services/firmware/upgrade/mode/src/firmware_download_mode.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/services/firmware/upgrade/mode/src/firmware_download_mode.cpp b/services/firmware/upgrade/mode/src/firmware_download_mode.cpp index d2b4c70e..d6ad9947 100644 --- a/services/firmware/upgrade/mode/src/firmware_download_mode.cpp +++ b/services/firmware/upgrade/mode/src/firmware_download_mode.cpp @@ -26,6 +26,7 @@ #include "firmware_status_cache.h" #include "firmware_task_operator.h" #include "firmware_update_helper.h" +#include "string_utils.h" namespace OHOS { namespace UpdateEngine { -- Gitee From 5a9d6d7b12dcdb26c2715c92bdbd94a75a32e8fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B9=E5=8F=8B=E6=9D=BE?= Date: Tue, 17 Dec 2024 13:07:33 +0000 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邹友松 --- foundations/ability/utils/include/string_utils.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/ability/utils/include/string_utils.h b/foundations/ability/utils/include/string_utils.h index 2f40ade9..5c22f79c 100644 --- a/foundations/ability/utils/include/string_utils.h +++ b/foundations/ability/utils/include/string_utils.h @@ -161,7 +161,7 @@ private: return StrCnvResult::FAILED; } number = numTemp; - //判断字符串是否含有特殊字符 例如"100a" + // 判断字符串是否含有特殊字符 例如"100a" if (result.ptr != strTemp.data() + strTemp.size()) { return StrCnvResult::INVALID_CHAR; } -- Gitee