diff --git a/include/id_worker.h b/include/id_worker.h index 3fe29e2..8e89903 100644 --- a/include/id_worker.h +++ b/include/id_worker.h @@ -33,7 +33,7 @@ public: std::vector 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> &items); + void LoadIdFromHap(std::map> &items); private: int64_t GenerateAppId(ResType resType, const std::string &name); diff --git a/include/resource_item.h b/include/resource_item.h index 08ec82c..1cbe0a2 100644 --- a/include/resource_item.h +++ b/include/resource_item.h @@ -47,6 +47,7 @@ public: const std::vector SplitValue() const; bool IsArray() const; bool IsPair() const; + void CheckData(); ResourceItem &operator=(const ResourceItem &other); private: diff --git a/src/id_worker.cpp b/src/id_worker.cpp index 406573a..010d527 100644 --- a/src/id_worker.cpp +++ b/src/id_worker.cpp @@ -84,12 +84,13 @@ int64_t IdWorker::GetSystemId(ResType resType, const string &name) const return result->second.id; } -void IdWorker::LoadIdFromHap(const map> &items) +void IdWorker::LoadIdFromHap(map> &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); diff --git a/src/resource_item.cpp b/src/resource_item.cpp index 2a1793e..b6dc464 100644 --- a/src/resource_item.cpp +++ b/src/resource_item.cpp @@ -160,6 +160,17 @@ const std::vector 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) { diff --git a/src/resource_table.cpp b/src/resource_table.cpp index 6659c23..269d1e9 100644 --- a/src/resource_table.cpp +++ b/src/resource_table.cpp @@ -510,9 +510,6 @@ bool ResourceTable::ReadDataRecordStart(basic_istream &in, RecordItem &rec const vector &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);