192a12a34Sopenharmony_ci/*
292a12a34Sopenharmony_ci * Copyright (c) 2020 Huawei Device Co., Ltd.
392a12a34Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
492a12a34Sopenharmony_ci * you may not use this file except in compliance with the License.
592a12a34Sopenharmony_ci * You may obtain a copy of the License at
692a12a34Sopenharmony_ci *
792a12a34Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
892a12a34Sopenharmony_ci *
992a12a34Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1092a12a34Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1192a12a34Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1292a12a34Sopenharmony_ci * See the License for the specific language governing permissions and
1392a12a34Sopenharmony_ci * limitations under the License.
1492a12a34Sopenharmony_ci */
1592a12a34Sopenharmony_ci
1692a12a34Sopenharmony_ci#ifndef OHOS_UTILS_H
1792a12a34Sopenharmony_ci#define OHOS_UTILS_H
1892a12a34Sopenharmony_ci
1992a12a34Sopenharmony_ci#include "adapter.h"
2092a12a34Sopenharmony_ci#include "securec.h"
2192a12a34Sopenharmony_ci#include "stdint.h"
2292a12a34Sopenharmony_ci
2392a12a34Sopenharmony_cinamespace OHOS {
2492a12a34Sopenharmony_ciconst uint32_t MAX_STR_SIZE = 4096;
2592a12a34Sopenharmony_ci
2692a12a34Sopenharmony_cistruct Utils {
2792a12a34Sopenharmony_ci    static char *Strdup(const char *src)
2892a12a34Sopenharmony_ci    {
2992a12a34Sopenharmony_ci        if (src == nullptr) {
3092a12a34Sopenharmony_ci            return nullptr;
3192a12a34Sopenharmony_ci        }
3292a12a34Sopenharmony_ci
3392a12a34Sopenharmony_ci        size_t len = strlen(src);
3492a12a34Sopenharmony_ci        if (len > MAX_STR_SIZE) {
3592a12a34Sopenharmony_ci            return nullptr;
3692a12a34Sopenharmony_ci        }
3792a12a34Sopenharmony_ci        char *dst = reinterpret_cast<char *>(AdapterMalloc(len + 1));
3892a12a34Sopenharmony_ci        if (dst == nullptr) {
3992a12a34Sopenharmony_ci            return nullptr;
4092a12a34Sopenharmony_ci        }
4192a12a34Sopenharmony_ci        errno_t err = strncpy_s(dst, len + 1, src, len);
4292a12a34Sopenharmony_ci        if (err != EOK) {
4392a12a34Sopenharmony_ci            AdapterFree(dst);
4492a12a34Sopenharmony_ci            return nullptr;
4592a12a34Sopenharmony_ci        }
4692a12a34Sopenharmony_ci        return dst;
4792a12a34Sopenharmony_ci    }
4892a12a34Sopenharmony_ci
4992a12a34Sopenharmony_ci    static void *Memdup(const void *src, uint32_t len)
5092a12a34Sopenharmony_ci    {
5192a12a34Sopenharmony_ci        if ((src == nullptr) || (len == 0) || (len > MAX_STR_SIZE)) {
5292a12a34Sopenharmony_ci            return nullptr;
5392a12a34Sopenharmony_ci        }
5492a12a34Sopenharmony_ci
5592a12a34Sopenharmony_ci        void *dst = AdapterMalloc(len);
5692a12a34Sopenharmony_ci        if (dst == nullptr) {
5792a12a34Sopenharmony_ci            return nullptr;
5892a12a34Sopenharmony_ci        }
5992a12a34Sopenharmony_ci
6092a12a34Sopenharmony_ci        int ret = memcpy_s(dst, len, src, len);
6192a12a34Sopenharmony_ci        if (ret != 0) {
6292a12a34Sopenharmony_ci            AdapterFree(dst);
6392a12a34Sopenharmony_ci            return nullptr;
6492a12a34Sopenharmony_ci        }
6592a12a34Sopenharmony_ci
6692a12a34Sopenharmony_ci        return dst;
6792a12a34Sopenharmony_ci    }
6892a12a34Sopenharmony_ci}; // Utils
6992a12a34Sopenharmony_ci} // OHOS
7092a12a34Sopenharmony_ci
7192a12a34Sopenharmony_ci#endif // OHOS_UTILS_H
72