• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 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 "bundle_info_utils.h"
17 
18 #include "ability_info_utils.h"
19 #include "module_info_utils.h"
20 #include "securec.h"
21 
22 namespace OHOS {
23 const uint8_t GET_BUNDLE_WITH_ABILITIES = 1;
24 
FreeBundleInfos(BundleInfo * bundleInfos,uint32_t len)25 void BundleInfoUtils::FreeBundleInfos(BundleInfo *bundleInfos, uint32_t len)
26 {
27     if (bundleInfos == nullptr) {
28         return;
29     }
30     for (uint32_t i = 0; i < len; ++i) {
31         ClearBundleInfo(bundleInfos + i);
32     }
33     AdapterFree(bundleInfos);
34 }
35 
FreeBundleInfo(BundleInfo * bundleInfo)36 void BundleInfoUtils::FreeBundleInfo(BundleInfo *bundleInfo)
37 {
38     if (bundleInfo == nullptr) {
39         return;
40     }
41     ClearBundleInfo(bundleInfo);
42     AdapterFree(bundleInfo);
43 }
44 
CopyBundleInfo(int32_t flags,BundleInfo * des,BundleInfo src)45 void BundleInfoUtils::CopyBundleInfo(int32_t flags, BundleInfo *des, BundleInfo src)
46 {
47     if (des == nullptr) {
48         return;
49     }
50 
51     SetBundleInfoBundleName(des, src.bundleName);
52     SetBundleInfoLabel(des, src.label);
53     SetBundleInfoVersionName(des, src.versionName);
54     SetBundleInfoBigIconPath(des, src.bigIconPath);
55     SetBundleInfoCodePath(des, src.codePath);
56     SetBundleInfoDataPath(des, src.dataPath);
57     SetBundleInfoVendor(des, src.vendor);
58     SetBundleInfoModuleInfos(des, src.moduleInfos, src.numOfModule);
59     des->isSystemApp = src.isSystemApp;
60     des->versionCode = src.versionCode;
61     des->compatibleApi = src.compatibleApi;
62     des->targetApi = src.targetApi;
63     SetBundleInfoAppId(des, src.appId);
64 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
65     des->isKeepAlive = src.isKeepAlive;
66     des->isNativeApp = src.isNativeApp;
67     des->uid = src.uid;
68     des->gid = src.gid;
69     if (flags == GET_BUNDLE_WITH_ABILITIES) {
70         SetBundleInfoAbilityInfos(des, src.abilityInfos, src.numOfAbility);
71     } else {
72         des->abilityInfos = nullptr;
73         des->numOfAbility = 0;
74     }
75 #else
76     SetBundleInfoSmallIconPath(des, src.smallIconPath);
77     if (flags == GET_BUNDLE_WITH_ABILITIES) {
78         if (src.abilityInfo != nullptr) {
79             SetBundleInfoAbilityInfo(des, *(src.abilityInfo));
80         }
81     } else {
82         des->abilityInfo = nullptr;
83     }
84 #endif
85 }
86 
SetBundleInfoBundleName(BundleInfo * bundleInfo,const char * bundleName)87 bool BundleInfoUtils::SetBundleInfoBundleName(BundleInfo *bundleInfo, const char *bundleName)
88 {
89     if (bundleInfo == nullptr || bundleName == nullptr) {
90         return false;
91     }
92 
93     AdapterFree(bundleInfo->bundleName);
94     bundleInfo->bundleName = Utils::Strdup(bundleName);
95     return bundleInfo->bundleName != nullptr;
96 }
97 
SetBundleInfoVendor(BundleInfo * bundleInfo,const char * vendor)98 bool BundleInfoUtils::SetBundleInfoVendor(BundleInfo *bundleInfo, const char *vendor)
99 {
100     if (bundleInfo == nullptr || vendor == nullptr) {
101         return false;
102     }
103 
104     AdapterFree(bundleInfo->vendor);
105     bundleInfo->vendor = Utils::Strdup(vendor);
106     return bundleInfo->vendor != nullptr;
107 }
108 
SetBundleInfoLabel(BundleInfo * bundleInfo,const char * label)109 bool BundleInfoUtils::SetBundleInfoLabel(BundleInfo *bundleInfo, const char *label)
110 {
111     if (bundleInfo == nullptr || label == nullptr) {
112         return false;
113     }
114 
115     AdapterFree(bundleInfo->label);
116     bundleInfo->label = Utils::Strdup(label);
117     return bundleInfo->label != nullptr;
118 }
119 
SetBundleInfoVersionName(BundleInfo * bundleInfo,const char * versionName)120 bool BundleInfoUtils::SetBundleInfoVersionName(BundleInfo *bundleInfo, const char *versionName)
121 {
122     if (bundleInfo == nullptr || versionName == nullptr) {
123         return false;
124     }
125 
126     AdapterFree(bundleInfo->versionName);
127     bundleInfo->versionName = Utils::Strdup(versionName);
128     return bundleInfo->versionName != nullptr;
129 }
130 
SetBundleInfoBigIconPath(BundleInfo * bundleInfo,const char * bigIconPath)131 bool BundleInfoUtils::SetBundleInfoBigIconPath(BundleInfo *bundleInfo, const char *bigIconPath)
132 {
133     if (bundleInfo == nullptr || bigIconPath == nullptr) {
134         return false;
135     }
136 
137     AdapterFree(bundleInfo->bigIconPath);
138     bundleInfo->bigIconPath = Utils::Strdup(bigIconPath);
139     return bundleInfo->bigIconPath != nullptr;
140 }
141 
SetBundleInfoCodePath(BundleInfo * bundleInfo,const char * codePath)142 bool BundleInfoUtils::SetBundleInfoCodePath(BundleInfo *bundleInfo, const char *codePath)
143 {
144     if (bundleInfo == nullptr || codePath == nullptr) {
145         return false;
146     }
147 
148     AdapterFree(bundleInfo->codePath);
149     bundleInfo->codePath = Utils::Strdup(codePath);
150     return bundleInfo->codePath != nullptr;
151 }
152 
SetBundleInfoDataPath(BundleInfo * bundleInfo,const char * dataPath)153 bool BundleInfoUtils::SetBundleInfoDataPath(BundleInfo *bundleInfo, const char *dataPath)
154 {
155     if (bundleInfo == nullptr || dataPath == nullptr) {
156         return false;
157     }
158 
159     AdapterFree(bundleInfo->dataPath);
160     bundleInfo->dataPath = Utils::Strdup(dataPath);
161     return bundleInfo->dataPath != nullptr;
162 }
163 
SetBundleInfoModuleInfos(BundleInfo * bundleInfo,const ModuleInfo * moduleInfos,uint32_t numOfModule)164 bool BundleInfoUtils::SetBundleInfoModuleInfos(BundleInfo *bundleInfo, const ModuleInfo *moduleInfos,
165     uint32_t numOfModule)
166 {
167     if (numOfModule == 0) {
168         return true;
169     }
170 
171     if (moduleInfos == nullptr || bundleInfo == nullptr) {
172         return false;
173     }
174 
175     bundleInfo->numOfModule = numOfModule;
176     bundleInfo->moduleInfos = reinterpret_cast<ModuleInfo *>(AdapterMalloc(sizeof(ModuleInfo) * numOfModule));
177     if (bundleInfo->moduleInfos == nullptr) {
178         return false;
179     }
180 
181     int32_t ret = memset_s(bundleInfo->moduleInfos, sizeof(ModuleInfo) * numOfModule, 0,
182         sizeof(ModuleInfo) * numOfModule);
183     if (ret != EOK) {
184         AdapterFree(bundleInfo->moduleInfos);
185         return false;
186     }
187 
188     for (uint32_t i = 0; i < numOfModule; i++) {
189         ModuleInfoUtils::CopyModuleInfo(bundleInfo->moduleInfos + i, moduleInfos[i]);
190     }
191     return true;
192 }
193 
ClearModuleInfos(ModuleInfo * moduleInfos,uint32_t numOfModule)194 void BundleInfoUtils::ClearModuleInfos(ModuleInfo *moduleInfos, uint32_t numOfModule)
195 {
196     if (moduleInfos == nullptr || numOfModule == 0) {
197         return;
198     }
199 
200     for (uint32_t i = 0; i < numOfModule; i++) {
201         ClearModuleInfo(moduleInfos + i);
202     }
203 }
204 
SetBundleInfoAppId(BundleInfo * bundleInfo,const char * appId)205 bool BundleInfoUtils::SetBundleInfoAppId(BundleInfo *bundleInfo, const char *appId)
206 {
207     if (bundleInfo == nullptr || appId == nullptr) {
208         return false;
209     }
210 
211     AdapterFree(bundleInfo->appId);
212     bundleInfo->appId = Utils::Strdup(appId);
213     return bundleInfo->appId != nullptr;
214 }
215 
216 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
SetBundleInfoAbilityInfos(BundleInfo * bundleInfo,const AbilityInfo * abilityInfos,uint32_t numOfAbility)217 bool BundleInfoUtils::SetBundleInfoAbilityInfos(BundleInfo *bundleInfo, const AbilityInfo *abilityInfos,
218     uint32_t numOfAbility)
219 {
220     if (numOfAbility == 0) {
221         return true;
222     }
223 
224     if (abilityInfos == nullptr || bundleInfo == nullptr) {
225         return false;
226     }
227 
228     bundleInfo->numOfAbility = numOfAbility;
229     bundleInfo->abilityInfos = reinterpret_cast<AbilityInfo *>(AdapterMalloc(sizeof(AbilityInfo) * numOfAbility));
230     if (bundleInfo->abilityInfos == nullptr) {
231         return false;
232     }
233     int32_t ret = memset_s(bundleInfo->abilityInfos, sizeof(AbilityInfo) * numOfAbility, 0,
234         sizeof(AbilityInfo) * numOfAbility);
235     if (ret != EOK) {
236         AdapterFree(bundleInfo->abilityInfos);
237         return false;
238     }
239 
240     for (uint32_t i = 0; i < numOfAbility; i++) {
241         AbilityInfoUtils::CopyAbilityInfo(bundleInfo->abilityInfos + i, abilityInfos[i]);
242     }
243     return true;
244 }
245 
ClearAbilityInfos(AbilityInfo * abilityInfos,uint32_t numOfAbility)246 void BundleInfoUtils::ClearAbilityInfos(AbilityInfo *abilityInfos, uint32_t numOfAbility)
247 {
248     if (abilityInfos == nullptr || numOfAbility == 0) {
249         return;
250     }
251 
252     for (uint32_t i = 0; i < numOfAbility; i++) {
253         ClearAbilityInfo(abilityInfos + i);
254     }
255 }
256 #else
SetBundleInfoSmallIconPath(BundleInfo * bundleInfo,const char * smallIconPath)257 bool BundleInfoUtils::SetBundleInfoSmallIconPath(BundleInfo *bundleInfo, const char *smallIconPath)
258 {
259     if (bundleInfo == nullptr || smallIconPath == nullptr) {
260         return false;
261     }
262 
263     AdapterFree(bundleInfo->smallIconPath);
264     bundleInfo->smallIconPath = Utils::Strdup(smallIconPath);
265     return bundleInfo->smallIconPath != nullptr;
266 }
267 
SetBundleInfoAbilityInfo(BundleInfo * bundleInfo,AbilityInfo abilityInfo)268 bool BundleInfoUtils::SetBundleInfoAbilityInfo(BundleInfo *bundleInfo, AbilityInfo abilityInfo)
269 {
270     if (bundleInfo == nullptr) {
271         return false;
272     }
273 
274     ClearAbilityInfo(bundleInfo->abilityInfo);
275     AdapterFree(bundleInfo->abilityInfo);
276     bundleInfo->abilityInfo = reinterpret_cast<AbilityInfo *>(AdapterMalloc(sizeof(AbilityInfo)));
277     if (bundleInfo->abilityInfo == nullptr ||
278         memset_s(bundleInfo->abilityInfo, sizeof(AbilityInfo), 0, sizeof(AbilityInfo)) != EOK) {
279         AdapterFree(bundleInfo->abilityInfo);
280         return false;
281     }
282 
283     AbilityInfoUtils::CopyAbilityInfo(bundleInfo->abilityInfo, abilityInfo);
284     return true;
285 }
286 #endif
287 } // OHOS