1d9f0492fSopenharmony_ci/* 2d9f0492fSopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd. 3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License. 5d9f0492fSopenharmony_ci * You may obtain a copy of the License at 6d9f0492fSopenharmony_ci * 7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8d9f0492fSopenharmony_ci * 9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and 13d9f0492fSopenharmony_ci * limitations under the License. 14d9f0492fSopenharmony_ci */ 15d9f0492fSopenharmony_ci 16d9f0492fSopenharmony_ci#include "parameter.h" 17d9f0492fSopenharmony_ci 18d9f0492fSopenharmony_ci#include <stdint.h> 19d9f0492fSopenharmony_ci#include <stdlib.h> 20d9f0492fSopenharmony_ci 21d9f0492fSopenharmony_ci#include "param_comm.h" 22d9f0492fSopenharmony_ci#include "init_param.h" 23d9f0492fSopenharmony_ci#include "param_init.h" 24d9f0492fSopenharmony_ci#include "init_utils.h" 25d9f0492fSopenharmony_ci#include "sysparam_errno.h" 26d9f0492fSopenharmony_ci#include "securec.h" 27d9f0492fSopenharmony_ci#include "beget_ext.h" 28d9f0492fSopenharmony_ci 29d9f0492fSopenharmony_ciint WaitParameter(const char *key, const char *value, int timeout) 30d9f0492fSopenharmony_ci{ 31d9f0492fSopenharmony_ci BEGET_CHECK(!(key == NULL || value == NULL), return EC_INVALID); 32d9f0492fSopenharmony_ci int ret = SystemWaitParameter(key, value, timeout); 33d9f0492fSopenharmony_ci BEGET_CHECK_ONLY_ELOG(ret == 0, "WaitParameter failed! the errNum is: %d", ret); 34d9f0492fSopenharmony_ci return GetSystemError(ret); 35d9f0492fSopenharmony_ci} 36d9f0492fSopenharmony_ci 37d9f0492fSopenharmony_ciuint32_t FindParameter(const char *key) 38d9f0492fSopenharmony_ci{ 39d9f0492fSopenharmony_ci BEGET_CHECK(key != NULL, return (uint32_t)(-1)); 40d9f0492fSopenharmony_ci uint32_t handle = 0; 41d9f0492fSopenharmony_ci int ret = SystemFindParameter(key, &handle); 42d9f0492fSopenharmony_ci if (ret != 0) { 43d9f0492fSopenharmony_ci return (uint32_t)(-1); 44d9f0492fSopenharmony_ci } 45d9f0492fSopenharmony_ci return handle; 46d9f0492fSopenharmony_ci} 47d9f0492fSopenharmony_ci 48d9f0492fSopenharmony_ciuint32_t GetParameterCommitId(uint32_t handle) 49d9f0492fSopenharmony_ci{ 50d9f0492fSopenharmony_ci uint32_t commitId = 0; 51d9f0492fSopenharmony_ci int ret = SystemGetParameterCommitId(handle, &commitId); 52d9f0492fSopenharmony_ci BEGET_CHECK(ret == 0, return (uint32_t)(-1)); 53d9f0492fSopenharmony_ci return commitId; 54d9f0492fSopenharmony_ci} 55d9f0492fSopenharmony_ci 56d9f0492fSopenharmony_ciint GetParameterName(uint32_t handle, char *name, uint32_t len) 57d9f0492fSopenharmony_ci{ 58d9f0492fSopenharmony_ci if (name == NULL) { 59d9f0492fSopenharmony_ci return EC_INVALID; 60d9f0492fSopenharmony_ci } 61d9f0492fSopenharmony_ci int ret = SystemGetParameterName(handle, name, len); 62d9f0492fSopenharmony_ci if (ret == 0) { 63d9f0492fSopenharmony_ci return strlen(name); 64d9f0492fSopenharmony_ci } 65d9f0492fSopenharmony_ci BEGET_CHECK_ONLY_ELOG(ret == 0, "GetParameterName failed! the errNum is: %d", ret); 66d9f0492fSopenharmony_ci return GetSystemError(ret); 67d9f0492fSopenharmony_ci} 68d9f0492fSopenharmony_ci 69d9f0492fSopenharmony_ciint GetParameterValue(uint32_t handle, char *value, uint32_t len) 70d9f0492fSopenharmony_ci{ 71d9f0492fSopenharmony_ci if (value == NULL) { 72d9f0492fSopenharmony_ci return EC_INVALID; 73d9f0492fSopenharmony_ci } 74d9f0492fSopenharmony_ci uint32_t size = len; 75d9f0492fSopenharmony_ci int ret = SystemGetParameterValue(handle, value, &size); 76d9f0492fSopenharmony_ci if (ret == 0) { 77d9f0492fSopenharmony_ci return strlen(value); 78d9f0492fSopenharmony_ci } 79d9f0492fSopenharmony_ci BEGET_CHECK_ONLY_ELOG(ret == 0, "GetParameterValue failed! the errNum is: %d", ret); 80d9f0492fSopenharmony_ci return GetSystemError(ret); 81d9f0492fSopenharmony_ci} 82d9f0492fSopenharmony_ci 83d9f0492fSopenharmony_ciint GetParameter(const char *key, const char *def, char *value, uint32_t len) 84d9f0492fSopenharmony_ci{ 85d9f0492fSopenharmony_ci if ((key == NULL) || (value == NULL)) { 86d9f0492fSopenharmony_ci return EC_INVALID; 87d9f0492fSopenharmony_ci } 88d9f0492fSopenharmony_ci int ret = GetParameter_(key, def, value, len); 89d9f0492fSopenharmony_ci return (ret != 0) ? ret : strlen(value); 90d9f0492fSopenharmony_ci} 91d9f0492fSopenharmony_ci 92d9f0492fSopenharmony_ciint SetParameter(const char *key, const char *value) 93d9f0492fSopenharmony_ci{ 94d9f0492fSopenharmony_ci if ((key == NULL) || (value == NULL)) { 95d9f0492fSopenharmony_ci return EC_INVALID; 96d9f0492fSopenharmony_ci } 97d9f0492fSopenharmony_ci int ret = SystemSetParameter(key, value); 98d9f0492fSopenharmony_ci BEGET_CHECK_ONLY_ELOG(ret == 0, "SetParameter failed! the errNum is:%d", ret); 99d9f0492fSopenharmony_ci return GetSystemError(ret); 100d9f0492fSopenharmony_ci} 101d9f0492fSopenharmony_ci 102d9f0492fSopenharmony_ciint SaveParameters(void) 103d9f0492fSopenharmony_ci{ 104d9f0492fSopenharmony_ci int ret = SystemSaveParameters(); 105d9f0492fSopenharmony_ci return GetSystemError(ret); 106d9f0492fSopenharmony_ci} 107d9f0492fSopenharmony_ci 108d9f0492fSopenharmony_ciconst char *GetDeviceType(void) 109d9f0492fSopenharmony_ci{ 110d9f0492fSopenharmony_ci static const char *productType = NULL; 111d9f0492fSopenharmony_ci const char *deviceType = GetProperty("const.product.devicetype", &productType); 112d9f0492fSopenharmony_ci if (deviceType != NULL) { 113d9f0492fSopenharmony_ci return deviceType; 114d9f0492fSopenharmony_ci } 115d9f0492fSopenharmony_ci return GetProperty("const.build.characteristics", &productType); 116d9f0492fSopenharmony_ci} 117d9f0492fSopenharmony_ci 118d9f0492fSopenharmony_ciconst char *GetProductModel(void) 119d9f0492fSopenharmony_ci{ 120d9f0492fSopenharmony_ci return GetProductModel_(); 121d9f0492fSopenharmony_ci} 122d9f0492fSopenharmony_ci 123d9f0492fSopenharmony_ciconst char *GetManufacture(void) 124d9f0492fSopenharmony_ci{ 125d9f0492fSopenharmony_ci return GetManufacture_(); 126d9f0492fSopenharmony_ci} 127d9f0492fSopenharmony_ci 128d9f0492fSopenharmony_ciconst char *GetBrand(void) 129d9f0492fSopenharmony_ci{ 130d9f0492fSopenharmony_ci static const char *productBrand = NULL; 131d9f0492fSopenharmony_ci return GetProperty("const.product.brand", &productBrand); 132d9f0492fSopenharmony_ci} 133d9f0492fSopenharmony_ci 134d9f0492fSopenharmony_ciconst char *GetMarketName(void) 135d9f0492fSopenharmony_ci{ 136d9f0492fSopenharmony_ci static const char *marketName = NULL; 137d9f0492fSopenharmony_ci return GetProperty("const.product.name", &marketName); 138d9f0492fSopenharmony_ci} 139d9f0492fSopenharmony_ci 140d9f0492fSopenharmony_ciconst char *GetProductSeries(void) 141d9f0492fSopenharmony_ci{ 142d9f0492fSopenharmony_ci static const char *productSeries = NULL; 143d9f0492fSopenharmony_ci return GetProperty("const.build.product", &productSeries); 144d9f0492fSopenharmony_ci} 145d9f0492fSopenharmony_ci 146d9f0492fSopenharmony_ciconst char *GetSoftwareModel(void) 147d9f0492fSopenharmony_ci{ 148d9f0492fSopenharmony_ci static const char *softwareModel = NULL; 149d9f0492fSopenharmony_ci return GetProperty("const.software.model", &softwareModel); 150d9f0492fSopenharmony_ci} 151d9f0492fSopenharmony_ci 152d9f0492fSopenharmony_ciconst char *GetHardwareModel(void) 153d9f0492fSopenharmony_ci{ 154d9f0492fSopenharmony_ci static const char *hardwareModel = NULL; 155d9f0492fSopenharmony_ci return GetProperty("const.product.hardwareversion", &hardwareModel); 156d9f0492fSopenharmony_ci} 157d9f0492fSopenharmony_ci 158d9f0492fSopenharmony_ciconst char *GetHardwareProfile(void) 159d9f0492fSopenharmony_ci{ 160d9f0492fSopenharmony_ci static const char *hardwareProfile = NULL; 161d9f0492fSopenharmony_ci return GetProperty("const.product.hardwareprofile", &hardwareProfile); 162d9f0492fSopenharmony_ci} 163d9f0492fSopenharmony_ci 164d9f0492fSopenharmony_ciconst char *GetAbiList(void) 165d9f0492fSopenharmony_ci{ 166d9f0492fSopenharmony_ci static const char *productAbiList = NULL; 167d9f0492fSopenharmony_ci return GetProperty("const.product.cpu.abilist", &productAbiList); 168d9f0492fSopenharmony_ci} 169d9f0492fSopenharmony_ci 170d9f0492fSopenharmony_ciconst char *GetBootloaderVersion(void) 171d9f0492fSopenharmony_ci{ 172d9f0492fSopenharmony_ci static const char *productBootloader = NULL; 173d9f0492fSopenharmony_ci return GetProperty("const.product.bootloader.version", &productBootloader); 174d9f0492fSopenharmony_ci} 175d9f0492fSopenharmony_ci 176d9f0492fSopenharmony_ciint GetFirstApiVersion(void) 177d9f0492fSopenharmony_ci{ 178d9f0492fSopenharmony_ci static const char *firstApiVersion = NULL; 179d9f0492fSopenharmony_ci GetProperty("const.product.firstapiversion", &firstApiVersion); 180d9f0492fSopenharmony_ci if (firstApiVersion == NULL) { 181d9f0492fSopenharmony_ci return 0; 182d9f0492fSopenharmony_ci } 183d9f0492fSopenharmony_ci return atoi(firstApiVersion); 184d9f0492fSopenharmony_ci} 185d9f0492fSopenharmony_ci 186d9f0492fSopenharmony_ciconst char *GetDisplayVersion(void) 187d9f0492fSopenharmony_ci{ 188d9f0492fSopenharmony_ci static const char *displayVersion = NULL; 189d9f0492fSopenharmony_ci return GetProperty("const.product.software.version", &displayVersion); 190d9f0492fSopenharmony_ci} 191d9f0492fSopenharmony_ci 192d9f0492fSopenharmony_ciconst char *GetIncrementalVersion(void) 193d9f0492fSopenharmony_ci{ 194d9f0492fSopenharmony_ci static const char *incrementalVersion = NULL; 195d9f0492fSopenharmony_ci return GetProperty("const.product.incremental.version", &incrementalVersion); 196d9f0492fSopenharmony_ci} 197d9f0492fSopenharmony_ci 198d9f0492fSopenharmony_ciconst char *GetOsReleaseType(void) 199d9f0492fSopenharmony_ci{ 200d9f0492fSopenharmony_ci static const char *osReleaseType = NULL; 201d9f0492fSopenharmony_ci return GetProperty("const.ohos.releasetype", &osReleaseType); 202d9f0492fSopenharmony_ci} 203d9f0492fSopenharmony_ci 204d9f0492fSopenharmony_cistatic const char *GetSdkApiVersion_(void) 205d9f0492fSopenharmony_ci{ 206d9f0492fSopenharmony_ci static const char *sdkApiVersion = NULL; 207d9f0492fSopenharmony_ci return GetProperty("const.ohos.apiversion", &sdkApiVersion); 208d9f0492fSopenharmony_ci} 209d9f0492fSopenharmony_ci 210d9f0492fSopenharmony_ciconst char *GetBuildType(void) 211d9f0492fSopenharmony_ci{ 212d9f0492fSopenharmony_ci static const char *buildType = NULL; 213d9f0492fSopenharmony_ci return GetProperty("const.product.build.type", &buildType); 214d9f0492fSopenharmony_ci} 215d9f0492fSopenharmony_ci 216d9f0492fSopenharmony_ciconst char *GetBuildUser(void) 217d9f0492fSopenharmony_ci{ 218d9f0492fSopenharmony_ci static const char *buildUser = NULL; 219d9f0492fSopenharmony_ci return GetProperty("const.product.build.user", &buildUser); 220d9f0492fSopenharmony_ci} 221d9f0492fSopenharmony_ci 222d9f0492fSopenharmony_ciconst char *GetBuildHost(void) 223d9f0492fSopenharmony_ci{ 224d9f0492fSopenharmony_ci static const char *buildHost = NULL; 225d9f0492fSopenharmony_ci return GetProperty("const.product.build.host", &buildHost); 226d9f0492fSopenharmony_ci} 227d9f0492fSopenharmony_ci 228d9f0492fSopenharmony_ciconst char *GetBuildTime(void) 229d9f0492fSopenharmony_ci{ 230d9f0492fSopenharmony_ci static const char *buildTime = NULL; 231d9f0492fSopenharmony_ci return GetProperty("const.product.build.date", &buildTime); 232d9f0492fSopenharmony_ci} 233d9f0492fSopenharmony_ci 234d9f0492fSopenharmony_ciconst char *GetSerial(void) 235d9f0492fSopenharmony_ci{ 236d9f0492fSopenharmony_ci return GetSerial_(); 237d9f0492fSopenharmony_ci} 238d9f0492fSopenharmony_ci 239d9f0492fSopenharmony_ciint GetDevUdid(char *udid, int size) 240d9f0492fSopenharmony_ci{ 241d9f0492fSopenharmony_ci return GetDevUdid_(udid, size); 242d9f0492fSopenharmony_ci} 243d9f0492fSopenharmony_ci 244d9f0492fSopenharmony_cistatic const char *BuildOSFullName(void) 245d9f0492fSopenharmony_ci{ 246d9f0492fSopenharmony_ci const char release[] = "Release"; 247d9f0492fSopenharmony_ci const char *releaseType = GetOsReleaseType(); 248d9f0492fSopenharmony_ci const char *fullName = GetFullName_(); 249d9f0492fSopenharmony_ci if (fullName == NULL || releaseType == NULL) { 250d9f0492fSopenharmony_ci return NULL; 251d9f0492fSopenharmony_ci } 252d9f0492fSopenharmony_ci if (strncmp(releaseType, release, sizeof(release) - 1) != 0) { 253d9f0492fSopenharmony_ci char *value = calloc(1, OS_FULL_NAME_LEN); 254d9f0492fSopenharmony_ci if (value == NULL) { 255d9f0492fSopenharmony_ci return NULL; 256d9f0492fSopenharmony_ci } 257d9f0492fSopenharmony_ci int length = sprintf_s(value, OS_FULL_NAME_LEN, "%s(%s)", fullName, releaseType); 258d9f0492fSopenharmony_ci if (length < 0) { 259d9f0492fSopenharmony_ci free(value); 260d9f0492fSopenharmony_ci return NULL; 261d9f0492fSopenharmony_ci } 262d9f0492fSopenharmony_ci return value; 263d9f0492fSopenharmony_ci } 264d9f0492fSopenharmony_ci return strdup(fullName); 265d9f0492fSopenharmony_ci} 266d9f0492fSopenharmony_ci 267d9f0492fSopenharmony_ciconst char *GetOSFullName(void) 268d9f0492fSopenharmony_ci{ 269d9f0492fSopenharmony_ci static const char *osFullName = NULL; 270d9f0492fSopenharmony_ci if (osFullName != NULL) { 271d9f0492fSopenharmony_ci return osFullName; 272d9f0492fSopenharmony_ci } 273d9f0492fSopenharmony_ci osFullName = BuildOSFullName(); 274d9f0492fSopenharmony_ci if (osFullName == NULL) { 275d9f0492fSopenharmony_ci return EMPTY_STR; 276d9f0492fSopenharmony_ci } 277d9f0492fSopenharmony_ci return osFullName; 278d9f0492fSopenharmony_ci} 279d9f0492fSopenharmony_ci 280d9f0492fSopenharmony_cistatic const char *BuildVersionId(void) 281d9f0492fSopenharmony_ci{ 282d9f0492fSopenharmony_ci char value[VERSION_ID_MAX_LEN] = {0}; 283d9f0492fSopenharmony_ci if (GetDeviceType() == NULL) { 284d9f0492fSopenharmony_ci return NULL; 285d9f0492fSopenharmony_ci } 286d9f0492fSopenharmony_ci 287d9f0492fSopenharmony_ci int len = sprintf_s(value, VERSION_ID_MAX_LEN, "%s/%s/%s/%s/%s/%s/%s/%s/%s/%s", 288d9f0492fSopenharmony_ci GetDeviceType(), GetManufacture(), GetBrand(), GetProductSeries(), 289d9f0492fSopenharmony_ci GetOSFullName(), GetProductModel(), GetSoftwareModel(), 290d9f0492fSopenharmony_ci GetSdkApiVersion_(), GetIncrementalVersion(), GetBuildType()); 291d9f0492fSopenharmony_ci if (len <= 0) { 292d9f0492fSopenharmony_ci return NULL; 293d9f0492fSopenharmony_ci } 294d9f0492fSopenharmony_ci const char *versionId = strdup(value); 295d9f0492fSopenharmony_ci return versionId; 296d9f0492fSopenharmony_ci} 297d9f0492fSopenharmony_ci 298d9f0492fSopenharmony_ciconst char *GetVersionId(void) 299d9f0492fSopenharmony_ci{ 300d9f0492fSopenharmony_ci static const char *ohosVersionId = NULL; 301d9f0492fSopenharmony_ci if (ohosVersionId != NULL) { 302d9f0492fSopenharmony_ci return ohosVersionId; 303d9f0492fSopenharmony_ci } 304d9f0492fSopenharmony_ci ohosVersionId = BuildVersionId(); 305d9f0492fSopenharmony_ci if (ohosVersionId == NULL) { 306d9f0492fSopenharmony_ci return EMPTY_STR; 307d9f0492fSopenharmony_ci } 308d9f0492fSopenharmony_ci return ohosVersionId; 309d9f0492fSopenharmony_ci} 310d9f0492fSopenharmony_ci 311d9f0492fSopenharmony_ciint GetSdkApiVersion(void) 312d9f0492fSopenharmony_ci{ 313d9f0492fSopenharmony_ci static const char *sdkApiVersion = NULL; 314d9f0492fSopenharmony_ci GetProperty("const.ohos.apiversion", &sdkApiVersion); 315d9f0492fSopenharmony_ci if (sdkApiVersion == NULL) { 316d9f0492fSopenharmony_ci return 0; 317d9f0492fSopenharmony_ci } 318d9f0492fSopenharmony_ci return atoi(sdkApiVersion); 319d9f0492fSopenharmony_ci} 320d9f0492fSopenharmony_ci 321d9f0492fSopenharmony_ciconst char *GetSecurityPatchTag(void) 322d9f0492fSopenharmony_ci{ 323d9f0492fSopenharmony_ci static const char *securityPatchTag = NULL; 324d9f0492fSopenharmony_ci return GetProperty("const.ohos.version.security_patch", &securityPatchTag); 325d9f0492fSopenharmony_ci} 326d9f0492fSopenharmony_ci 327d9f0492fSopenharmony_ciconst char *GetBuildRootHash(void) 328d9f0492fSopenharmony_ci{ 329d9f0492fSopenharmony_ci static const char *buildRootHash = NULL; 330d9f0492fSopenharmony_ci return GetProperty("const.ohos.buildroothash", &buildRootHash); 331d9f0492fSopenharmony_ci} 332d9f0492fSopenharmony_ci 333d9f0492fSopenharmony_ciint32_t GetIntParameter(const char *key, int32_t def) 334d9f0492fSopenharmony_ci{ 335d9f0492fSopenharmony_ci char value[MAX_INT_LEN] = {0}; 336d9f0492fSopenharmony_ci uint32_t size = sizeof(value); 337d9f0492fSopenharmony_ci int ret = SystemGetParameter(key, value, &size); 338d9f0492fSopenharmony_ci if (ret != 0) { 339d9f0492fSopenharmony_ci return def; 340d9f0492fSopenharmony_ci } 341d9f0492fSopenharmony_ci 342d9f0492fSopenharmony_ci long long int result = 0; 343d9f0492fSopenharmony_ci if (StringToLL(value, &result) != 0) { 344d9f0492fSopenharmony_ci return def; 345d9f0492fSopenharmony_ci } 346d9f0492fSopenharmony_ci if (result <= INT32_MIN || result >= INT32_MAX) { 347d9f0492fSopenharmony_ci return def; 348d9f0492fSopenharmony_ci } 349d9f0492fSopenharmony_ci return (int32_t)result; 350d9f0492fSopenharmony_ci} 351d9f0492fSopenharmony_ci 352d9f0492fSopenharmony_ciuint32_t GetUintParameter(const char *key, uint32_t def) 353d9f0492fSopenharmony_ci{ 354d9f0492fSopenharmony_ci char value[MAX_INT_LEN] = {0}; 355d9f0492fSopenharmony_ci uint32_t size = sizeof(value); 356d9f0492fSopenharmony_ci int ret = SystemGetParameter(key, value, &size); 357d9f0492fSopenharmony_ci if (ret != 0) { 358d9f0492fSopenharmony_ci return def; 359d9f0492fSopenharmony_ci } 360d9f0492fSopenharmony_ci 361d9f0492fSopenharmony_ci unsigned long long int result = 0; 362d9f0492fSopenharmony_ci if (StringToULL(value, &result) != 0) { 363d9f0492fSopenharmony_ci return def; 364d9f0492fSopenharmony_ci } 365d9f0492fSopenharmony_ci if (result >= UINT32_MAX) { 366d9f0492fSopenharmony_ci return def; 367d9f0492fSopenharmony_ci } 368d9f0492fSopenharmony_ci return (uint32_t)result; 369d9f0492fSopenharmony_ci} 370d9f0492fSopenharmony_ci 371d9f0492fSopenharmony_ciconst char *GetDistributionOSName(void) 372d9f0492fSopenharmony_ci{ 373d9f0492fSopenharmony_ci static const char *distributionOsName = NULL; 374d9f0492fSopenharmony_ci GetProperty("const.product.os.dist.name", &distributionOsName); 375d9f0492fSopenharmony_ci if (distributionOsName == NULL) { 376d9f0492fSopenharmony_ci distributionOsName = EMPTY_STR; 377d9f0492fSopenharmony_ci } 378d9f0492fSopenharmony_ci return distributionOsName; 379d9f0492fSopenharmony_ci} 380d9f0492fSopenharmony_ci 381d9f0492fSopenharmony_ciconst char *GetDistributionOSVersion(void) 382d9f0492fSopenharmony_ci{ 383d9f0492fSopenharmony_ci static const char *distributionOsVersion = NULL; 384d9f0492fSopenharmony_ci GetProperty("const.product.os.dist.version", &distributionOsVersion); 385d9f0492fSopenharmony_ci if (distributionOsVersion == NULL) { 386d9f0492fSopenharmony_ci distributionOsVersion = GetOSFullName(); 387d9f0492fSopenharmony_ci } 388d9f0492fSopenharmony_ci return distributionOsVersion; 389d9f0492fSopenharmony_ci} 390d9f0492fSopenharmony_ci 391d9f0492fSopenharmony_ciint GetDistributionOSApiVersion(void) 392d9f0492fSopenharmony_ci{ 393d9f0492fSopenharmony_ci static const char *distributionOsApiVersion = NULL; 394d9f0492fSopenharmony_ci GetProperty("const.product.os.dist.apiversion", &distributionOsApiVersion); 395d9f0492fSopenharmony_ci if (distributionOsApiVersion == NULL) { 396d9f0492fSopenharmony_ci distributionOsApiVersion = GetSdkApiVersion_(); 397d9f0492fSopenharmony_ci } 398d9f0492fSopenharmony_ci return atoi(distributionOsApiVersion); 399d9f0492fSopenharmony_ci} 400d9f0492fSopenharmony_ciconst char *GetDistributionOSApiName(void) 401d9f0492fSopenharmony_ci{ 402d9f0492fSopenharmony_ci static const char *distributionOsApiName = NULL; 403d9f0492fSopenharmony_ci GetProperty("const.product.os.dist.apiname", &distributionOsApiName); 404d9f0492fSopenharmony_ci if (distributionOsApiName == NULL) { 405d9f0492fSopenharmony_ci distributionOsApiName = EMPTY_STR; 406d9f0492fSopenharmony_ci } 407d9f0492fSopenharmony_ci return distributionOsApiName; 408d9f0492fSopenharmony_ci} 409d9f0492fSopenharmony_ci 410d9f0492fSopenharmony_ciconst char *GetDistributionOSReleaseType(void) 411d9f0492fSopenharmony_ci{ 412d9f0492fSopenharmony_ci static const char *distributionOsReleaseType = NULL; 413d9f0492fSopenharmony_ci GetProperty("const.product.os.dist.releasetype", &distributionOsReleaseType); 414d9f0492fSopenharmony_ci if (distributionOsReleaseType == NULL) { 415d9f0492fSopenharmony_ci distributionOsReleaseType = GetOsReleaseType(); 416d9f0492fSopenharmony_ci } 417d9f0492fSopenharmony_ci return distributionOsReleaseType; 418d9f0492fSopenharmony_ci} 419