|
@@ -13,6 +13,7 @@
|
|
|
#include <stdio.h>
|
|
|
#include <stdlib.h>
|
|
|
#include <vector>
|
|
|
+#include <regex>
|
|
|
#include "ResourceWatcher_UserCode.h"
|
|
|
|
|
|
#ifdef RVC_OS_LINUX
|
|
@@ -763,6 +764,17 @@ void ResourceWatcherFSM::AutoDeleteFiles()
|
|
|
|
|
|
}
|
|
|
|
|
|
+BOOL ResourceWatcherFSM::IsValidVersionNumber(const std::string& version)
|
|
|
+{
|
|
|
+ // 正则表达式解释:
|
|
|
+ // ^[1-9]\d* 第一部分:首位不能为0的正整数
|
|
|
+ // (\.(0|([1-9]\d*))){3} 后跟三个部分,每个部分为0或非零无前导整数
|
|
|
+ // $ 结束符
|
|
|
+ std::regex pattern(R"(^([1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$)");
|
|
|
+
|
|
|
+ return std::regex_match(version, pattern);
|
|
|
+}
|
|
|
+
|
|
|
//终端升级后会执行版本清理功能
|
|
|
BOOL ResourceWatcherFSM::DeleteVersionPackage()
|
|
|
{
|
|
@@ -824,13 +836,19 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
|
|
|
//files.push_back(string(dirp->d_name));
|
|
|
CInstallInfo verInfo = {};
|
|
|
DWORD dwMajor(0), dwMinor(0), dwRevision(0), dwBuild(0);
|
|
|
- int n = sscanf(dirp->d_name, "%d.%d.%d.%d", &dwMajor, &dwMinor, &dwRevision, &dwBuild);
|
|
|
- if (n != 4)
|
|
|
+ BOOL isValidVer = IsValidVersionNumber(fileinfo.name);
|
|
|
+ if (isValidVer == FALSE)
|
|
|
{
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", dirp->d_name);
|
|
|
continue;
|
|
|
}
|
|
|
else {
|
|
|
+ int n = sscanf(dirp->d_name, "%d.%d.%d.%d", &dwMajor, &dwMinor, &dwRevision, &dwBuild);
|
|
|
+ if (n != 4)
|
|
|
+ {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Split version failed.The PARTS number of [%s] is [%d].", fileinfo.name, n);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
CVersion verName(dwMajor, dwMinor, dwRevision, dwBuild);
|
|
|
if (verName.IsValid())
|
|
|
{
|
|
@@ -841,7 +859,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
|
|
|
intallInfoVects.push_back(verName);
|
|
|
}
|
|
|
else {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", dirp->d_name);
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]Bigger than current version file.", dirp->d_name);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -856,13 +874,19 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
|
|
|
do {
|
|
|
CInstallInfo verInfo = {};
|
|
|
DWORD dwMajor(0), dwMinor(0), dwRevision(0), dwBuild(0);
|
|
|
- int n = sscanf(fileinfo.name, "%d.%d.%d.%d", &dwMajor, &dwMinor, &dwRevision, &dwBuild);
|
|
|
- if (n != 4)
|
|
|
+ BOOL isValidVer = IsValidVersionNumber(fileinfo.name);
|
|
|
+ if (isValidVer == FALSE)
|
|
|
{
|
|
|
DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", fileinfo.name);
|
|
|
continue;
|
|
|
}
|
|
|
else {
|
|
|
+ int n = sscanf(fileinfo.name, "%d.%d.%d.%d", &dwMajor, &dwMinor, &dwRevision, &dwBuild);
|
|
|
+ if (n != 4)
|
|
|
+ {
|
|
|
+ DbgWithLink(LOG_LEVEL_INFO, LOG_TYPE_SYSTEM)("Split version failed.The PARTS number of [%s] is [%d].", fileinfo.name, n);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
CVersion verName(dwMajor, dwMinor, dwRevision, dwBuild);
|
|
|
if (verName.IsValid())
|
|
|
{
|
|
@@ -874,7 +898,7 @@ BOOL ResourceWatcherFSM::DeleteVersionPackage()
|
|
|
intallInfoVects.push_back(verName);
|
|
|
}
|
|
|
else {
|
|
|
- DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("Not target version file.[%s]", fileinfo.name);
|
|
|
+ DbgWithLink(LOG_LEVEL_DEBUG, LOG_TYPE_SYSTEM)("[%s]Bigger than current version file.", fileinfo.name);
|
|
|
}
|
|
|
}
|
|
|
} while (_findnext(hFile, &fileinfo) == 0);
|