From a810791a6e1f3b165ea0a975ce52ea4dc46d88df Mon Sep 17 00:00:00 2001 From: LY Date: Sat, 22 Feb 2025 11:30:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81FDSAN=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: LY --- frameworks/i18n/include/data_resource.h | 11 +++--- frameworks/i18n/src/data_resource.cpp | 49 ++++++++++++++++--------- 2 files changed, 38 insertions(+), 22 deletions(-) diff --git a/frameworks/i18n/include/data_resource.h b/frameworks/i18n/include/data_resource.h index 18a9800..d9fbb3b 100644 --- a/frameworks/i18n/include/data_resource.h +++ b/frameworks/i18n/include/data_resource.h @@ -16,6 +16,7 @@ #ifndef DATA_RESOURCE_IMPL_H #define DATA_RESOURCE_IMPL_H +#include #include #include #include @@ -105,10 +106,10 @@ public: private: static uint32_t GetFallbackMask(const LocaleInfo &src); - bool ReadHeader(int32_t infile); - bool PrepareData(int32_t infile); + bool ReadHeader(FILE* infile); + bool PrepareData(FILE* infile); int32_t BinarySearchLocale(const uint32_t mask, unsigned char *locales); - bool GetStringFromStringPool(char *configs, const uint32_t configsSize, int32_t infile, LocaleDataType type); + bool GetStringFromStringPool(char *configs, const uint32_t configsSize, FILE* infile, LocaleDataType type); uint32_t ConvertUint(unsigned char *src); uint32_t ConvertUChar(unsigned char *src); char *GetString2(DataResourceType type) const; @@ -120,9 +121,9 @@ private: char *locales); void GetFallbackAndDefaultInfo(const int32_t &fallbackLocaleIndex, const int32_t &defaultLocaleIndex, uint32_t &fallbackConfigOffset, uint32_t &defaultConfigOffset, char *locales); - bool Retrieve(char *configs, const uint32_t configsSize, int32_t infile, const uint32_t originalCount, + bool Retrieve(char *configs, const uint32_t configsSize, FILE* infile, const uint32_t originalCount, LocaleDataType type); - bool PrepareLocaleData(int32_t infile, uint32_t configOffset, uint32_t count, LocaleDataType type); + bool PrepareLocaleData(FILE* infile, uint32_t configOffset, uint32_t count, LocaleDataType type); bool FullLoaded(); void GetType(char** &adjustResource, uint32_t* &adjustResourceIndex, uint32_t &count, LocaleDataType type); uint32_t GetFinalCount(char *configs, uint32_t configSize, LocaleDataType type); diff --git a/frameworks/i18n/src/data_resource.cpp b/frameworks/i18n/src/data_resource.cpp index e0fe540..6fe046a 100644 --- a/frameworks/i18n/src/data_resource.cpp +++ b/frameworks/i18n/src/data_resource.cpp @@ -149,8 +149,8 @@ char *DataResource::BinarySearchString(uint32_t *indexArray, uint32_t length, ui bool DataResource::Init(void) { - int32_t infile = open(DATA_RESOURCE_PATH, O_RDONLY); - if (infile < 0) { + FILE* infile = fopen(DATA_RESOURCE_PATH, "r"); + if (infile == nullptr) { #ifdef I18N_PRODUCT HILOG_ERROR(HILOG_MODULE_GLOBAL, "DataResource::Init: open DATA_RESOURCE_PATH failed, errno(%d)!", errno); #endif @@ -158,26 +158,41 @@ bool DataResource::Init(void) } bool ret = ReadHeader(infile); if (!ret) { - close(infile); + int status = fclose(infile); + if (status != 0) { +#ifdef I18N_PRODUCT + HILOG_ERROR(HILOG_MODULE_GLOBAL, "DataResource::Init: Close infile failed."); +#endif + } return false; } if ((localesCount < 1) || (localesCount > MAX_LOCALE_ITEM_SIZE)) { - close(infile); + int status = fclose(infile); + if (status != 0) { +#ifdef I18N_PRODUCT + HILOG_ERROR(HILOG_MODULE_GLOBAL, "DataResource::Init: Close infile failed."); +#endif + } return false; } ret = PrepareData(infile); - close(infile); + int status = fclose(infile); + if (status != 0) { +#ifdef I18N_PRODUCT + HILOG_ERROR(HILOG_MODULE_GLOBAL, "DataResource::Init: Close infile failed."); +#endif + } return ret; } -bool DataResource::ReadHeader(int32_t infile) +bool DataResource::ReadHeader(FILE* infile) { - int32_t seekSize = lseek(infile, GLOBAL_RESOURCE_HEADER_SKIP, SEEK_SET); + int32_t seekSize = fseek(infile, GLOBAL_RESOURCE_HEADER_SKIP, SEEK_SET); if (seekSize < 0) { return false; } char cache[GLOBAL_RESOURCE_HEADER_LEFT] = {0}; - int32_t readSize = read(infile, cache, GLOBAL_RESOURCE_HEADER_LEFT); + int32_t readSize = fread(cache, sizeof(char), GLOBAL_RESOURCE_HEADER_LEFT, infile); if (readSize != GLOBAL_RESOURCE_HEADER_LEFT) { return false; } @@ -187,14 +202,14 @@ bool DataResource::ReadHeader(int32_t infile) return true; } -bool DataResource::PrepareData(int32_t infile) +bool DataResource::PrepareData(FILE* infile) { uint32_t localeSize = localesCount * GLOBAL_LOCALE_MASK_ITEM_SIZE; char *locales = reinterpret_cast(I18nMalloc(localeSize)); if (locales == nullptr) { return false; } - int32_t readSize = read(infile, locales, localeSize); + int32_t readSize = fread(locales, sizeof(char), localeSize, infile); if (readSize < 0 || localeSize != static_cast(readSize)) { I18nFree(static_cast(locales)); return false; @@ -265,7 +280,7 @@ void DataResource::GetFallbackAndDefaultInfo(const int32_t &fallbackLocaleIndex, } } -bool DataResource::PrepareLocaleData(int32_t infile, uint32_t configOffset, uint32_t count, LocaleDataType type) +bool DataResource::PrepareLocaleData(FILE* infile, uint32_t configOffset, uint32_t count, LocaleDataType type) { currentType = type; if (count < 1 || count > DataResourceType::RESOURCE_TYPE_END) { @@ -276,12 +291,12 @@ bool DataResource::PrepareLocaleData(int32_t infile, uint32_t configOffset, uint if (configs == nullptr) { return false; } - int32_t seekSize = lseek(infile, configOffset, SEEK_SET); + int32_t seekSize = fseek(infile, configOffset, SEEK_SET); if (configOffset != static_cast(seekSize)) { I18nFree(static_cast(configs)); return false; } - int32_t readSize = read(infile, configs, resourceSize); + int32_t readSize = fread(configs, sizeof(char), resourceSize, infile); if (readSize != resourceSize) { I18nFree(static_cast(configs)); return false; @@ -323,7 +338,7 @@ uint32_t DataResource::GetFinalCount(char *configs, uint32_t configSize, LocaleD return finalCount; } -bool DataResource::GetStringFromStringPool(char *configs, const uint32_t configsSize, int32_t infile, +bool DataResource::GetStringFromStringPool(char *configs, const uint32_t configsSize, FILE* infile, LocaleDataType type) { uint32_t finalCount = GetFinalCount(configs, configsSize, type); @@ -387,7 +402,7 @@ void DataResource::GetType(char** &adjustResource, uint32_t* &adjustResourceInde } } -bool DataResource::Retrieve(char *configs, uint32_t configsSize, int32_t infile, const uint32_t orginalCount, +bool DataResource::Retrieve(char *configs, uint32_t configsSize, FILE* infile, const uint32_t orginalCount, LocaleDataType type) { uint32_t count = 0; @@ -404,7 +419,7 @@ bool DataResource::Retrieve(char *configs, uint32_t configsSize, int32_t infile, GLOBAL_RESOURCE_CONFIG_SIZE + GLOBAL_RESOURCE_INDEX_OFFSET)); uint32_t length = ConvertUChar(reinterpret_cast(configs + i * GLOBAL_RESOURCE_CONFIG_SIZE + GLOBAL_RESOURCE_MASK_OFFSET)); - int32_t seekSize = lseek(infile, stringPoolOffset + offset, SEEK_SET); + int32_t seekSize = fseek(infile, stringPoolOffset + offset, SEEK_SET); if ((length == 0) || (seekSize != static_cast(stringPoolOffset + offset))) { adjustResource[currentIndex] = nullptr; adjustResourceIndex[currentIndex] = index; @@ -414,7 +429,7 @@ bool DataResource::Retrieve(char *configs, uint32_t configsSize, int32_t infile, loaded[index] = DataResourceType::RESOURCE_TYPE_END; return false; } - int32_t readSize = read(infile, temp, length); + int32_t readSize = fread(temp, sizeof(char), length, infile); temp[length] = 0; if ((readSize < 0) || (static_cast(readSize) != length)) { I18nFree(static_cast(temp)); -- Gitee