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