• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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