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