1 /*
2 * Copyright (c) 2023 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 #define LOG_TAG "RelationalAsset"
16 #include "relational_asset.h"
17
18 #include "logger.h"
19 #include "relational_store_error_code.h"
20 #include "securec.h"
21 #include <cstdlib>
22
23 using namespace OHOS::RdbNdk;
24 constexpr int ASSET_TRANSFORM_BASE = 10;
OH_Data_Asset_SetName(Data_Asset * asset,const char * name)25 int OH_Data_Asset_SetName(Data_Asset *asset, const char *name)
26 {
27 if (asset == nullptr || name == nullptr) {
28 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
29 }
30 asset->asset_.name = name;
31 return OH_Rdb_ErrCode::RDB_OK;
32 }
33
OH_Data_Asset_SetUri(Data_Asset * asset,const char * uri)34 int OH_Data_Asset_SetUri(Data_Asset *asset, const char *uri)
35 {
36 if (asset == nullptr || uri == nullptr) {
37 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
38 }
39
40 asset->asset_.uri = uri;
41 return OH_Rdb_ErrCode::RDB_OK;
42 }
43
OH_Data_Asset_SetPath(Data_Asset * asset,const char * path)44 int OH_Data_Asset_SetPath(Data_Asset *asset, const char *path)
45 {
46 if (asset == nullptr || path == nullptr) {
47 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
48 }
49
50 asset->asset_.path = path;
51 return OH_Rdb_ErrCode::RDB_OK;
52 }
53
OH_Data_Asset_SetCreateTime(Data_Asset * asset,int64_t createTime)54 int OH_Data_Asset_SetCreateTime(Data_Asset *asset, int64_t createTime)
55 {
56 if (asset == nullptr) {
57 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
58 }
59
60 asset->asset_.createTime = std::to_string(createTime);
61 return OH_Rdb_ErrCode::RDB_OK;
62 }
63
OH_Data_Asset_SetModifyTime(Data_Asset * asset,int64_t modifyTime)64 int OH_Data_Asset_SetModifyTime(Data_Asset *asset, int64_t modifyTime)
65 {
66 if (asset == nullptr) {
67 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
68 }
69
70 asset->asset_.modifyTime = std::to_string(modifyTime);
71 return OH_Rdb_ErrCode::RDB_OK;
72 }
73
OH_Data_Asset_SetSize(Data_Asset * asset,size_t size)74 int OH_Data_Asset_SetSize(Data_Asset *asset, size_t size)
75 {
76 if (asset == nullptr) {
77 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
78 }
79
80 asset->asset_.size = std::to_string(size);
81 return OH_Rdb_ErrCode::RDB_OK;
82 }
83
OH_Data_Asset_SetStatus(Data_Asset * asset,Data_AssetStatus status)84 int OH_Data_Asset_SetStatus(Data_Asset *asset, Data_AssetStatus status)
85 {
86 if (asset == nullptr) {
87 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
88 }
89
90 asset->asset_.status = status;
91 return OH_Rdb_ErrCode::RDB_OK;
92 }
93
OH_Data_Asset_GetName(Data_Asset * asset,char * name,size_t * length)94 int OH_Data_Asset_GetName(Data_Asset *asset, char *name, size_t *length)
95 {
96 if (asset == nullptr) {
97 LOG_ERROR("Asset get name error: asset is NULL ? %{public}d.", (asset == nullptr));
98 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
99 }
100 size_t nameLength = asset->asset_.name.size();
101 if (nameLength >= *length) {
102 LOG_ERROR("Asset get name error: length is too small ? %{public}d.", (nameLength >= *length));
103 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
104 }
105 errno_t result = strcpy_s(name, *length, asset->asset_.name.c_str());
106 if (result != EOK) {
107 LOG_ERROR("strcpy_s failed, result is %{public}d", result);
108 return OH_Rdb_ErrCode::RDB_ERR;
109 }
110 *length = nameLength;
111 return OH_Rdb_ErrCode::RDB_OK;
112 }
113
OH_Data_Asset_GetUri(Data_Asset * asset,char * uri,size_t * length)114 int OH_Data_Asset_GetUri(Data_Asset *asset, char *uri, size_t *length)
115 {
116 if (asset == nullptr) {
117 LOG_ERROR("Asset get uri error: asset is NULL ? %{public}d.", (asset == nullptr));
118 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
119 }
120 size_t uriLength = asset->asset_.uri.size();
121 if (uriLength >= *length) {
122 LOG_ERROR("Asset get uri error: length is too small ? %{public}d.", (uriLength >= *length));
123 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
124 }
125
126 errno_t result = strcpy_s(uri, *length, asset->asset_.uri.c_str());
127 if (result != EOK) {
128 LOG_ERROR("strcpy_s failed, result is %{public}d", result);
129 return OH_Rdb_ErrCode::RDB_ERR;
130 }
131 *length = uriLength;
132 return OH_Rdb_ErrCode::RDB_OK;
133 }
134
OH_Data_Asset_GetPath(Data_Asset * asset,char * path,size_t * length)135 int OH_Data_Asset_GetPath(Data_Asset *asset, char *path, size_t *length)
136 {
137 if (asset == nullptr) {
138 LOG_ERROR("Asset get path error: asset is NULL ? %{public}d.", (asset == nullptr));
139 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
140 }
141 size_t pathLength = asset->asset_.path.size();
142 if (pathLength >= *length) {
143 LOG_ERROR("Asset get path error: length is too small ? %{public}d.", (pathLength >= *length));
144 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
145 }
146 errno_t result = strcpy_s(path, *length, asset->asset_.path.c_str());
147 if (result != EOK) {
148 LOG_ERROR("strcpy_s failed, result is %{public}d", result);
149 return OH_Rdb_ErrCode::RDB_ERR;
150 }
151 *length = pathLength;
152 return OH_Rdb_ErrCode::RDB_OK;
153 }
154
OH_Data_Asset_GetCreateTime(Data_Asset * asset,int64_t * createTime)155 int OH_Data_Asset_GetCreateTime(Data_Asset *asset, int64_t *createTime)
156 {
157 if (asset == nullptr) {
158 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
159 }
160 char *endPtr;
161 *createTime = strtol(asset->asset_.createTime.c_str(), &endPtr, ASSET_TRANSFORM_BASE);
162 if (*endPtr != '\0') {
163 LOG_ERROR("GetCreateTime failed.");
164 return OH_Rdb_ErrCode::RDB_ERR;
165 }
166 return OH_Rdb_ErrCode::RDB_OK;
167 }
168
OH_Data_Asset_GetModifyTime(Data_Asset * asset,int64_t * modifyTime)169 int OH_Data_Asset_GetModifyTime(Data_Asset *asset, int64_t *modifyTime)
170 {
171 if (asset == nullptr) {
172 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
173 }
174 char *endPtr;
175 *modifyTime = strtol(asset->asset_.modifyTime.c_str(), &endPtr, ASSET_TRANSFORM_BASE);
176 if (*endPtr != '\0') {
177 LOG_ERROR("GetModifyTime failed.");
178 return OH_Rdb_ErrCode::RDB_ERR;
179 }
180 return OH_Rdb_ErrCode::RDB_OK;
181 }
182
OH_Data_Asset_GetSize(Data_Asset * asset,size_t * size)183 int OH_Data_Asset_GetSize(Data_Asset *asset, size_t *size)
184 {
185 if (asset == nullptr) {
186 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
187 }
188 char *endPtr;
189 *size = strtol(asset->asset_.size.c_str(), &endPtr, ASSET_TRANSFORM_BASE);
190 if (*endPtr != '\0') {
191 LOG_ERROR("GetModifyTime failed.");
192 return OH_Rdb_ErrCode::RDB_ERR;
193 }
194 return OH_Rdb_ErrCode::RDB_OK;
195 }
196
OH_Data_Asset_GetStatus(Data_Asset * asset,Data_AssetStatus * status)197 int OH_Data_Asset_GetStatus(Data_Asset *asset, Data_AssetStatus *status)
198 {
199 if (asset == nullptr) {
200 return OH_Rdb_ErrCode::RDB_E_INVALID_ARGS;
201 }
202 *status = static_cast<Data_AssetStatus>(asset->asset_.status);
203 return OH_Rdb_ErrCode::RDB_OK;
204 }
205
OH_Data_Asset_CreateOne()206 Data_Asset *OH_Data_Asset_CreateOne()
207 {
208 return new (std::nothrow) Data_Asset();
209 }
210
OH_Data_Asset_DestroyOne(Data_Asset * asset)211 int OH_Data_Asset_DestroyOne(Data_Asset *asset)
212 {
213 delete asset;
214 asset = nullptr;
215 return OH_Rdb_ErrCode::RDB_OK;
216 }
217
OH_Data_Asset_CreateMultiple(uint32_t count)218 Data_Asset **OH_Data_Asset_CreateMultiple(uint32_t count)
219 {
220 auto assets = new Data_Asset *[count];
221 for (uint32_t i = 0; i < count; ++i) {
222 assets[i] = new Data_Asset();
223 }
224 return assets;
225 }
226
OH_Data_Asset_DestroyMultiple(Data_Asset ** assets,uint32_t count)227 int OH_Data_Asset_DestroyMultiple(Data_Asset **assets, uint32_t count)
228 {
229 for (uint32_t i = 0; i < count; ++i) {
230 delete assets[i];
231 }
232 delete[] assets;
233 assets = nullptr;
234 return OH_Rdb_ErrCode::RDB_OK;
235 }
236