修复FA模型读取错误的问题

Signed-off-by: HanSY <hansiyuan1@huawei.com>
This commit is contained in:
HanSY
2025-01-16 16:35:15 +08:00
parent 61c3658b9c
commit 684e791ba3
5 changed files with 17 additions and 7 deletions
+1 -1
View File
@@ -33,7 +33,7 @@ public:
std::vector<ResourceId> GetHeaderId() const;
int64_t GetId(ResType resType, const std::string &name) const;
int64_t GetSystemId(ResType resType, const std::string &name) const;
void LoadIdFromHap(const std::map<int64_t, std::vector<ResourceItem>> &items);
void LoadIdFromHap(std::map<int64_t, std::vector<ResourceItem>> &items);
private:
int64_t GenerateAppId(ResType resType, const std::string &name);
+1
View File
@@ -47,6 +47,7 @@ public:
const std::vector<std::string> SplitValue() const;
bool IsArray() const;
bool IsPair() const;
void CheckData();
ResourceItem &operator=(const ResourceItem &other);
private:
+4 -3
View File
@@ -84,12 +84,13 @@ int64_t IdWorker::GetSystemId(ResType resType, const string &name) const
return result->second.id;
}
void IdWorker::LoadIdFromHap(const map<int64_t, vector<ResourceItem>> &items)
void IdWorker::LoadIdFromHap(map<int64_t, vector<ResourceItem>> &items)
{
int64_t minId = 0xffffffff;
int64_t maxId = 0x01000000;
for (const auto &item : items) {
for (const auto &resourceItem : item.second) {
for (auto &item : items) {
for (auto &resourceItem : item.second) {
resourceItem.CheckData();
ids_.emplace(make_pair(resourceItem.GetResType(), resourceItem.GetName()), item.first);
}
minId = min(minId, item.first);
+11
View File
@@ -160,6 +160,17 @@ const std::vector<std::string> ResourceItem::SplitValue() const
return ret;
}
void ResourceItem::CheckData()
{
int8_t data[GetDataLength()];
for (int i = 0; i < GetDataLength(); i++) {
data[i] = GetData()[i];
}
if (data[GetDataLength() - 1] == '\0') {
SetData(data, GetDataLength() - 1);
}
}
ResourceItem &ResourceItem::operator=(const ResourceItem &other)
{
if (this == &other) {
-3
View File
@@ -510,9 +510,6 @@ bool ResourceTable::ReadDataRecordStart(basic_istream<char> &in, RecordItem &rec
const vector<KeyParam> &keyparams = limitKeys.find(datas.find(offset)->second.second)->second;
ResourceItem resourceitem(filename, keyparams, g_resTypeMap.find(record.resType)->second);
resourceitem.SetLimitKey(ResourceUtil::PaserKeyParam(keyparams));
if (values[value_size - 1] == '\0') {
value_size--;
}
resourceitem.SetData(values, value_size);
resourceitem.MarkCoverable();
resInfos[record.id].push_back(resourceitem);