11401458bSopenharmony_ci/* 21401458bSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 31401458bSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41401458bSopenharmony_ci * you may not use this file except in compliance with the License. 51401458bSopenharmony_ci * You may obtain a copy of the License at 61401458bSopenharmony_ci * 71401458bSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81401458bSopenharmony_ci * 91401458bSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101401458bSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111401458bSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121401458bSopenharmony_ci * See the License for the specific language governing permissions and 131401458bSopenharmony_ci * limitations under the License. 141401458bSopenharmony_ci */ 151401458bSopenharmony_ci#include "string_util.h" 161401458bSopenharmony_ci 171401458bSopenharmony_ci#include "securec.h" 181401458bSopenharmony_ci 191401458bSopenharmony_cinamespace OHOS { 201401458bSopenharmony_cinamespace HiviewDFX { 211401458bSopenharmony_cinamespace StringUtil { 221401458bSopenharmony_ciint CopyCString(char* dst, const std::string& src, size_t len) 231401458bSopenharmony_ci{ 241401458bSopenharmony_ci if (src.length() > len) { 251401458bSopenharmony_ci return -1; 261401458bSopenharmony_ci } 271401458bSopenharmony_ci return strcpy_s(dst, src.length() + 1, src.c_str()); 281401458bSopenharmony_ci} 291401458bSopenharmony_ci 301401458bSopenharmony_ciint CreateCString(char** dst, const std::string& src, size_t len) 311401458bSopenharmony_ci{ 321401458bSopenharmony_ci if (src.length() > len) { 331401458bSopenharmony_ci return -1; 341401458bSopenharmony_ci } 351401458bSopenharmony_ci char* data = new(std::nothrow) char[src.length() + 1]{0}; 361401458bSopenharmony_ci if (data == nullptr) { 371401458bSopenharmony_ci return -1; 381401458bSopenharmony_ci } 391401458bSopenharmony_ci if (auto res = strcpy_s(data, src.length() + 1, src.c_str()); res != 0) { 401401458bSopenharmony_ci delete[] data; 411401458bSopenharmony_ci return res; 421401458bSopenharmony_ci } 431401458bSopenharmony_ci *dst = data; 441401458bSopenharmony_ci return 0; 451401458bSopenharmony_ci} 461401458bSopenharmony_ci 471401458bSopenharmony_ciint ConvertCString(const std::string& str, char** sp, size_t len) 481401458bSopenharmony_ci{ 491401458bSopenharmony_ci if (str.length() > len) { 501401458bSopenharmony_ci return -1; 511401458bSopenharmony_ci } 521401458bSopenharmony_ci char* data = new(std::nothrow) char[str.length() + 1]{0}; 531401458bSopenharmony_ci if (data == nullptr) { 541401458bSopenharmony_ci return -1; 551401458bSopenharmony_ci } 561401458bSopenharmony_ci if (auto res = strcpy_s(data, str.length() + 1, str.c_str()); res != 0) { 571401458bSopenharmony_ci StringUtil::DeletePointer<char>(&data); 581401458bSopenharmony_ci return res; 591401458bSopenharmony_ci } 601401458bSopenharmony_ci *sp = data; 611401458bSopenharmony_ci return 0; 621401458bSopenharmony_ci} 631401458bSopenharmony_ci 641401458bSopenharmony_ciint ConvertCStringVec(const std::vector<std::string>& vec, char*** strs, size_t& len) 651401458bSopenharmony_ci{ 661401458bSopenharmony_ci if (vec.empty()) { 671401458bSopenharmony_ci return 0; 681401458bSopenharmony_ci } 691401458bSopenharmony_ci len = vec.size(); 701401458bSopenharmony_ci char** data = new(std::nothrow) char* [len]{0}; 711401458bSopenharmony_ci if (data == nullptr) { 721401458bSopenharmony_ci return 0; 731401458bSopenharmony_ci } 741401458bSopenharmony_ci for (size_t i = 0; i < len; i++) { 751401458bSopenharmony_ci if (int res = ConvertCString(vec[i], &data[i]); res != 0) { 761401458bSopenharmony_ci StringUtil::DeletePointers<char>(&data, i); 771401458bSopenharmony_ci return res; 781401458bSopenharmony_ci } 791401458bSopenharmony_ci } 801401458bSopenharmony_ci *strs = data; 811401458bSopenharmony_ci return 0; 821401458bSopenharmony_ci} 831401458bSopenharmony_ci 841401458bSopenharmony_civoid MemsetSafe(void* dest, size_t destSize) 851401458bSopenharmony_ci{ 861401458bSopenharmony_ci (void)memset_s(dest, destSize, 0, destSize); 871401458bSopenharmony_ci} 881401458bSopenharmony_ci} // namespace StringUtil 891401458bSopenharmony_ci} // namespace HiviewDFX 901401458bSopenharmony_ci} // namespace OHOS 91