1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #include "init_data.h" 17 #include <cstring> 18 #include <mutex> 19 20 namespace { 21 const char* g_hwDirectory = "/system/usr/ohos_icu"; 22 static int status = 0; 23 std::mutex dataMutex; 24 } 25 26 /** 27 * set icu data files to hwDirectory 28 */ SetHwIcuDirectory()29void SetHwIcuDirectory() 30 { 31 std::lock_guard<std::mutex> lock(dataMutex); 32 if (status != 0) { 33 return; 34 } 35 u_setDataDirectory(g_hwDirectory); 36 status = 1; 37 } 38 39 /** 40 * convienient method to set icu data file directory to dir 41 */ SetArkuiXIcuDirectory(const char * dir)42void SetArkuiXIcuDirectory(const char* dir) 43 { 44 std::lock_guard<std::mutex> lock(dataMutex); 45 if (status != 0) { 46 return; 47 } 48 u_setDataDirectory(dir); 49 status = 1; 50 } 51 GetIcuVersion()52extern "C" const char* GetIcuVersion() 53 { 54 const char* icuVerion = U_ICU_VERSION_SHORT; 55 return icuVerion; 56 } 57 SetOhosIcuDirectory()58extern "C" void SetOhosIcuDirectory() 59 { 60 std::lock_guard<std::mutex> lock(dataMutex); 61 const char* currDir = u_getDataDirectory(); 62 if (strncmp(currDir, g_hwDirectory, strlen(g_hwDirectory)) == 0) { 63 return; 64 } 65 u_setDataDirectory(g_hwDirectory); 66 } 67