1 /*
2 * Copyright (c) 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 "hisysevent_record_c.h"
17
18 #include "hisysevent_record.h"
19 #include "string_util.h"
20
21 namespace {
22 using HiSysEventRecordCls = OHOS::HiviewDFX::HiSysEventRecord;
23 constexpr int ERR_NULL = -1;
24
25 template <typename T>
GetParamValue(const HiSysEventRecordC & record,const char * name,T & value)26 int GetParamValue(const HiSysEventRecordC& record, const char* name, T& value)
27 {
28 if (record.jsonStr == nullptr || name == nullptr) {
29 return ERR_NULL;
30 }
31 HiSysEventRecordCls recordObj(record.jsonStr);
32 return recordObj.GetParamValue(name, value);
33 }
34
GetParamValue(const HiSysEventRecordC & record,const char * name,char ** value)35 int GetParamValue(const HiSysEventRecordC& record, const char* name, char** value)
36 {
37 if (record.jsonStr == nullptr || name == nullptr) {
38 return ERR_NULL;
39 }
40 HiSysEventRecordCls recordObj(record.jsonStr);
41 std::string str;
42 if (auto res = recordObj.GetParamValue(name, str); res != 0) {
43 return res;
44 }
45 return OHOS::HiviewDFX::StringUtil::ConvertCString(str, value);
46 }
47
48 template <typename T>
GetParamValues(const HiSysEventRecordC & record,const char * name,T ** value,size_t & len)49 int GetParamValues(const HiSysEventRecordC& record, const char* name, T** value, size_t& len)
50 {
51 if (record.jsonStr == nullptr || name == nullptr) {
52 return ERR_NULL;
53 }
54 HiSysEventRecordCls recordObj(record.jsonStr);
55 std::vector<T> dataVec;
56 if (auto res = recordObj.GetParamValue(name, dataVec); res != 0) {
57 return res;
58 }
59 if (dataVec.empty()) {
60 return 0;
61 }
62 len = dataVec.size();
63 T* data = new(std::nothrow) T[len];
64 if (data == nullptr) {
65 return ERR_NULL;
66 }
67 for (size_t i = 0; i < len; i++) {
68 data[i] = dataVec[i];
69 }
70 *value = data;
71 return 0;
72 }
73
GetParamValues(const HiSysEventRecordC & record,const char * name,char *** value,size_t & len)74 int GetParamValues(const HiSysEventRecordC& record, const char* name, char*** value, size_t& len)
75 {
76 if (record.jsonStr == nullptr || name == nullptr) {
77 return ERR_NULL;
78 }
79 HiSysEventRecordCls recordObj(record.jsonStr);
80 std::vector<std::string> dataVec;
81 if (auto res = recordObj.GetParamValue(name, dataVec); res != 0) {
82 return res;
83 }
84 if (dataVec.empty()) {
85 return 0;
86 }
87 return OHOS::HiviewDFX::StringUtil::ConvertCStringVec(dataVec, value, len);
88 }
89
GetParamNames(const HiSysEventRecordC & record,char *** names,size_t & len)90 int GetParamNames(const HiSysEventRecordC& record, char*** names, size_t& len)
91 {
92 if (record.jsonStr == nullptr) {
93 return ERR_NULL;
94 }
95 HiSysEventRecordCls recordObj(record.jsonStr);
96 std::vector<std::string> dataVec;
97 recordObj.GetParamNames(dataVec);
98 if (dataVec.empty()) {
99 return 0;
100 }
101 return OHOS::HiviewDFX::StringUtil::ConvertCStringVec(dataVec, names, len);
102 }
103
GetParamInt64Value(const HiSysEventRecordC & record,const char * name,int64_t & value)104 int GetParamInt64Value(const HiSysEventRecordC& record, const char* name, int64_t& value)
105 {
106 return GetParamValue<int64_t>(record, name, value);
107 }
108
GetParamUint64Value(const HiSysEventRecordC & record,const char * name,uint64_t & value)109 int GetParamUint64Value(const HiSysEventRecordC& record, const char* name, uint64_t& value)
110 {
111 return GetParamValue<uint64_t>(record, name, value);
112 }
113
GetParamDoubleValue(const HiSysEventRecordC & record,const char * name,double & value)114 int GetParamDoubleValue(const HiSysEventRecordC& record, const char* name, double& value)
115 {
116 return GetParamValue<double>(record, name, value);
117 }
118
GetParamStringValue(const HiSysEventRecordC & record,const char * name,char ** value)119 int GetParamStringValue(const HiSysEventRecordC& record, const char* name, char** value)
120 {
121 return GetParamValue(record, name, value);
122 }
123
GetParamInt64Values(const HiSysEventRecordC & record,const char * name,int64_t ** value,size_t & len)124 int GetParamInt64Values(const HiSysEventRecordC& record, const char* name, int64_t** value, size_t& len)
125 {
126 return GetParamValues<int64_t>(record, name, value, len);
127 }
128
GetParamUint64Values(const HiSysEventRecordC & record,const char * name,uint64_t ** value,size_t & len)129 int GetParamUint64Values(const HiSysEventRecordC& record, const char* name, uint64_t** value, size_t& len)
130 {
131 return GetParamValues<uint64_t>(record, name, value, len);
132 }
133
GetParamDoubleValues(const HiSysEventRecordC & record,const char * name,double ** value,size_t & len)134 int GetParamDoubleValues(const HiSysEventRecordC& record, const char* name, double** value, size_t& len)
135 {
136 return GetParamValues<double>(record, name, value, len);
137 }
138
GetParamStringValues(const HiSysEventRecordC & record,const char * name,char *** value,size_t & len)139 int GetParamStringValues(const HiSysEventRecordC& record, const char* name, char*** value, size_t& len)
140 {
141 return GetParamValues(record, name, value, len);
142 }
143 }
144
145 #ifdef __cplusplus
146 extern "C" {
147 #endif
148
OH_HiSysEvent_GetParamNames(const HiSysEventRecordC * record,char *** names,size_t * len)149 void OH_HiSysEvent_GetParamNames(const HiSysEventRecordC* record, char*** names, size_t* len)
150 {
151 GetParamNames(*record, names, *len);
152 }
153
OH_HiSysEvent_GetParamInt64Value(const HiSysEventRecordC * record,const char * name,int64_t * value)154 int OH_HiSysEvent_GetParamInt64Value(const HiSysEventRecordC* record, const char* name, int64_t* value)
155 {
156 return GetParamInt64Value(*record, name, *value);
157 }
158
OH_HiSysEvent_GetParamUint64Value(const HiSysEventRecordC * record,const char * name,uint64_t * value)159 int OH_HiSysEvent_GetParamUint64Value(const HiSysEventRecordC* record, const char* name, uint64_t* value)
160 {
161 return GetParamUint64Value(*record, name, *value);
162 }
163
OH_HiSysEvent_GetParamDoubleValue(const HiSysEventRecordC * record,const char * name,double * value)164 int OH_HiSysEvent_GetParamDoubleValue(const HiSysEventRecordC* record, const char* name, double* value)
165 {
166 return GetParamDoubleValue(*record, name, *value);
167 }
168
OH_HiSysEvent_GetParamStringValue(const HiSysEventRecordC * record,const char * name,char ** value)169 int OH_HiSysEvent_GetParamStringValue(const HiSysEventRecordC* record, const char* name, char** value)
170 {
171 return GetParamStringValue(*record, name, value);
172 }
173
OH_HiSysEvent_GetParamInt64Values(const HiSysEventRecordC * record,const char * name,int64_t ** value,size_t * len)174 int OH_HiSysEvent_GetParamInt64Values(const HiSysEventRecordC* record, const char* name, int64_t** value, size_t* len)
175 {
176 return GetParamInt64Values(*record, name, value, *len);
177 }
178
OH_HiSysEvent_GetParamUint64Values(const HiSysEventRecordC * record,const char * name,uint64_t ** value,size_t * len)179 int OH_HiSysEvent_GetParamUint64Values(const HiSysEventRecordC* record, const char* name, uint64_t** value, size_t* len)
180 {
181 return GetParamUint64Values(*record, name, value, *len);
182 }
183
OH_HiSysEvent_GetParamDoubleValues(const HiSysEventRecordC * record,const char * name,double ** value,size_t * len)184 int OH_HiSysEvent_GetParamDoubleValues(const HiSysEventRecordC* record, const char* name, double** value, size_t* len)
185 {
186 return GetParamDoubleValues(*record, name, value, *len);
187 }
188
OH_HiSysEvent_GetParamStringValues(const HiSysEventRecordC * record,const char * name,char *** value,size_t * len)189 int OH_HiSysEvent_GetParamStringValues(const HiSysEventRecordC* record, const char* name, char*** value, size_t* len)
190 {
191 return GetParamStringValues(*record, name, value, *len);
192 }
193 #ifdef __cplusplus
194 }
195 #endif
196