llvm-project/libc/src/string/allocating_string_utils.h
Siva Chandra Reddy f340030577 [libc] Add custom operator new to handle allocation failures gracefully.
This patch adds the implementation of the custom operator new functions.
The implementation of the internal strdup has been updated to use
operator new for allocation.

We will make it a policy and document that all allocations have to go
through the libc's own operator new. A future change will also add
operator delete replacements and make it a policy that deallocations in
libc internal code have to go through those replacements.

Reviewed By: lntue

Differential Revision: https://reviews.llvm.org/D139584
2022-12-11 00:29:04 +00:00

38 lines
1.1 KiB
C++

//===-- Allocating string utils ---------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
#ifndef LIBC_SRC_STRING_ALLOCATING_STRING_UTILS_H
#define LIBC_SRC_STRING_ALLOCATING_STRING_UTILS_H
#include "src/__support/CPP/new.h"
#include "src/__support/CPP/optional.h"
#include "src/string/memory_utils/memcpy_implementations.h" // For string_length
#include "src/string/string_utils.h"
#include <stddef.h> // For size_t
namespace __llvm_libc {
namespace internal {
cpp::optional<char *> strdup(const char *src) {
if (src == nullptr)
return cpp::nullopt;
size_t len = string_length(src) + 1;
AllocChecker ac;
char *newstr = new (ac) char[len];
if (!ac)
return cpp::nullopt;
inline_memcpy(newstr, src, len);
return newstr;
}
} // namespace internal
} // namespace __llvm_libc
#endif