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 "module_info_utils.h"
17
18 #include "utils.h"
19
20 namespace OHOS {
CopyModuleInfo(ModuleInfo * des,ModuleInfo src)21 void ModuleInfoUtils::CopyModuleInfo(ModuleInfo *des, ModuleInfo src)
22 {
23 if (des == nullptr) {
24 return;
25 }
26 SetModuleInfoModuleName(des, src.moduleName);
27 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
28 SetModuleInfoName(des, src.name);
29 SetModuleInfoDescription(des, src.description);
30 SetModuleInfoModuleType(des, src.moduleType);
31 SetModuleInfoDeviceType(des, src.deviceType, DEVICE_TYPE_SIZE);
32 des->isDeliveryInstall = src.isDeliveryInstall;
33 #endif
34 SetModuleInfoMetaData(des, src.metaData, METADATA_SIZE);
35 }
36
ClearModuleInfoMetaData(MetaData ** metaData,uint32_t numOfMetaData)37 void ModuleInfoUtils::ClearModuleInfoMetaData(MetaData **metaData, uint32_t numOfMetaData)
38 {
39 if (metaData == nullptr || numOfMetaData > METADATA_SIZE) {
40 return;
41 }
42 for (uint32_t i = 0; i < numOfMetaData; i++) {
43 if (metaData[i] != nullptr) {
44 AdapterFree(metaData[i]->name);
45 AdapterFree(metaData[i]->value);
46 AdapterFree(metaData[i]->extra);
47 AdapterFree(metaData[i]);
48 }
49 }
50 }
51
ClearModuleInfo(ModuleInfo * moduleInfo)52 void ModuleInfoUtils::ClearModuleInfo(ModuleInfo *moduleInfo)
53 {
54 if (moduleInfo == nullptr) {
55 return;
56 }
57 AdapterFree(moduleInfo->moduleName);
58 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
59 AdapterFree(moduleInfo->name);
60 AdapterFree(moduleInfo->description);
61 AdapterFree(moduleInfo->moduleType);
62 ClearModuleInfoDeviceType(moduleInfo->deviceType, DEVICE_TYPE_SIZE);
63 #endif
64 ClearModuleInfoMetaData(moduleInfo->metaData, METADATA_SIZE);
65 }
66
SetModuleInfoModuleName(ModuleInfo * moduleInfo,const char * moduleName)67 bool ModuleInfoUtils::SetModuleInfoModuleName(ModuleInfo *moduleInfo, const char *moduleName)
68 {
69 if (moduleInfo == nullptr || moduleName == nullptr) {
70 return false;
71 }
72
73 AdapterFree(moduleInfo->moduleName);
74 moduleInfo->moduleName = Utils::Strdup(moduleName);
75 return moduleInfo->moduleName != nullptr;
76 }
77
78 #ifdef OHOS_APPEXECFWK_BMS_BUNDLEMANAGER
SetModuleInfoName(ModuleInfo * moduleInfo,const char * name)79 bool ModuleInfoUtils::SetModuleInfoName(ModuleInfo *moduleInfo, const char *name)
80 {
81 if (moduleInfo == nullptr || name == nullptr) {
82 return false;
83 }
84
85 AdapterFree(moduleInfo->name);
86 moduleInfo->name = Utils::Strdup(name);
87 return moduleInfo->name != nullptr;
88 }
89
SetModuleInfoDescription(ModuleInfo * moduleInfo,const char * description)90 bool ModuleInfoUtils::SetModuleInfoDescription(ModuleInfo *moduleInfo, const char *description)
91 {
92 if (moduleInfo == nullptr || description == nullptr) {
93 return false;
94 }
95
96 AdapterFree(moduleInfo->description);
97 moduleInfo->description = Utils::Strdup(description);
98 return moduleInfo->description != nullptr;
99 }
100
SetModuleInfoModuleType(ModuleInfo * moduleInfo,const char * moduleType)101 bool ModuleInfoUtils::SetModuleInfoModuleType(ModuleInfo *moduleInfo, const char *moduleType)
102 {
103 if (moduleInfo == nullptr || moduleType == nullptr) {
104 return false;
105 }
106
107 AdapterFree(moduleInfo->moduleType);
108 moduleInfo->moduleType = Utils::Strdup(moduleType);
109 return moduleInfo->moduleType != nullptr;
110 }
111
SetModuleInfoDeviceType(ModuleInfo * moduleInfo,char ** deviceType,uint32_t numOfDeviceType)112 bool ModuleInfoUtils::SetModuleInfoDeviceType(ModuleInfo *moduleInfo, char **deviceType, uint32_t numOfDeviceType)
113 {
114 if (moduleInfo == nullptr || deviceType == nullptr || numOfDeviceType > DEVICE_TYPE_SIZE) {
115 return false;
116 }
117
118 ClearModuleInfoDeviceType(moduleInfo->deviceType, DEVICE_TYPE_SIZE);
119
120 for (uint32_t i = 0; i < numOfDeviceType; i++) {
121 if (deviceType[i] != nullptr) {
122 moduleInfo->deviceType[i] = Utils::Strdup(deviceType[i]);
123 if (moduleInfo->deviceType[i] == nullptr) {
124 ClearModuleInfoDeviceType(moduleInfo->deviceType, DEVICE_TYPE_SIZE);
125 return false;
126 }
127 }
128 }
129 return true;
130 }
131
ClearModuleInfoDeviceType(char ** deviceType,uint32_t numOfdeviceType)132 void ModuleInfoUtils::ClearModuleInfoDeviceType(char **deviceType, uint32_t numOfdeviceType)
133 {
134 if (deviceType == nullptr || numOfdeviceType == 0 || numOfdeviceType > DEVICE_TYPE_SIZE) {
135 return;
136 }
137 for (uint32_t i = 0; i < numOfdeviceType; i++) {
138 AdapterFree(deviceType[i]);
139 }
140 }
141 #endif
142
SetModuleInfoMetaData(ModuleInfo * moduleInfo,MetaData ** metaData,uint32_t numOfMetaData)143 bool ModuleInfoUtils::SetModuleInfoMetaData(ModuleInfo *moduleInfo, MetaData **metaData, uint32_t numOfMetaData)
144 {
145 if (moduleInfo == nullptr || metaData == nullptr || numOfMetaData > METADATA_SIZE) {
146 return false;
147 }
148
149 ClearModuleInfoMetaData(moduleInfo->metaData, METADATA_SIZE);
150
151 for (uint32_t i = 0; i < numOfMetaData; i++) {
152 if (metaData[i] != nullptr) {
153 moduleInfo->metaData[i] = reinterpret_cast<MetaData *>(AdapterMalloc(sizeof(MetaData)));
154 if (moduleInfo->metaData[i] == nullptr ||
155 memset_s(moduleInfo->metaData[i], sizeof(MetaData), 0, sizeof(MetaData)) != EOK) {
156 ClearModuleInfoMetaData(moduleInfo->metaData, i);
157 return false;
158 }
159 if (metaData[i]->name != nullptr) {
160 moduleInfo->metaData[i]->name = Utils::Strdup(metaData[i]->name);
161 }
162 if (metaData[i]->value != nullptr) {
163 moduleInfo->metaData[i]->value = Utils::Strdup(metaData[i]->value);
164 }
165 if (metaData[i]->extra != nullptr) {
166 moduleInfo->metaData[i]->extra = Utils::Strdup(metaData[i]->extra);
167 }
168
169 if ((metaData[i]->name != nullptr && moduleInfo->metaData[i]->name == nullptr) ||
170 (metaData[i]->value != nullptr && moduleInfo->metaData[i]->value == nullptr) ||
171 (metaData[i]->extra != nullptr && moduleInfo->metaData[i]->extra == nullptr)) {
172 ClearModuleInfoMetaData(moduleInfo->metaData, i);
173 return false;
174 }
175 }
176 }
177 return true;
178 }
179 } // OHOS