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