diff --git a/utils/src/b_json/b_json_entity_ext_manage.cpp b/utils/src/b_json/b_json_entity_ext_manage.cpp index 474f4eb2a8774935a244143a4978a27add32f63e..badebe52fc5eb49edbfb60856f5dbb83b0512ab4 100644 --- a/utils/src/b_json/b_json_entity_ext_manage.cpp +++ b/utils/src/b_json/b_json_entity_ext_manage.cpp @@ -20,6 +20,7 @@ #include #include "b_error/b_error.h" +#include "b_error/b_excep_utils.h" #include "b_json/b_json_entity_ext_manage.h" #include "b_resources/b_constants.h" #include "filemgmt_libhilog.h" @@ -46,6 +47,43 @@ static bool CheckBigFile(const string &tarFile) return false; } +/** + * @brief 判断是否属于自身打包的文件 + * + * @param fileName + */ +static bool CheckOwnPackTar(const string &fileName) +{ + if (access(fileName.c_str(), F_OK) != 0) { + HILOGE("file does not exists"); + return false; + } + // 如果不是在默认路径下的文件包,不属于自身打包的tar文件 + string defaultBackupPath = string(BConstants::PATH_BUNDLE_BACKUP_HOME).append(BConstants::SA_BUNDLE_BACKUP_BACKUP); + string absPath; + try { + absPath = IncludeTrailingPathDelimiter(BExcepUltils::Canonicalize(ExtractFilePath(fileName))); + } catch (const BError &e) { + HILOGE("file is not backup path"); + return false; + } + + string::size_type pathPos = absPath.find(defaultBackupPath); + if (pathPos == string::npos || pathPos != 0) { + return false; + } + // 获取tar包名称 + string tarFile = ExtractFileName(fileName); + string::size_type pos = tarFile.find("."); + if (pos == string::npos) { + return false; + } + + string firstName = string(tarFile).substr(0, pos); + + return (firstName == "part") && (ExtractFileExt(tarFile) == "tar"); +} + static bool CheckUserTar(const string &fileName) { if (access(fileName.c_str(), F_OK) != 0) { @@ -139,7 +177,7 @@ void BJsonEntityExtManage::SetExtManage(const map lks = FindLinks(item, index); for (const auto &lk : lks) { value["hardlinks"].append(lk);