blob: 3939a67d9fe6d3306441124c95af811cb85a8fcb [file] [log] [blame] [edit]
//===-- regmalloc.cpp - Memory allocation for regex implementation --------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
// Support operator new/delete overriding for regex memory allocations.
//===----------------------------------------------------------------------===//
#include "regutils.h"
#include <algorithm>
#include <cstring>
#include <new>
extern "C" {
void *regex_malloc(size_t size) { return ::operator new(size, std::nothrow); }
void *regex_calloc(size_t num, size_t size) {
void *ptr = regex_malloc(num * size);
if (ptr)
std::memset(ptr, 0, num * size);
return ptr;
}
void *regex_realloc(void *ptr, size_t oldsize, size_t newsize) {
void *newptr = regex_malloc(newsize);
if (ptr == nullptr)
return newptr;
if (newptr == nullptr)
return nullptr;
std::memcpy(newptr, ptr, std::min(oldsize, newsize));
regex_free(ptr);
return newptr;
}
void regex_free(void *ptr) { return ::operator delete(ptr); }
}