// Copyright 2020 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Deliberately not including opj_malloc.h, which has poisoned malloc and
// friends.

#include "core/fxcrt/fx_memory.h"
#include "third_party/base/memory/aligned_memory.h"

extern "C" {

void* opj_malloc(size_t size) {
  return FXMEM_DefaultAlloc(size);
}

void* opj_calloc(size_t numOfElements, size_t sizeOfElements) {
  return FXMEM_DefaultCalloc(numOfElements, sizeOfElements);
}

void* opj_aligned_malloc(size_t size) {
  return size ? pdfium::base::AlignedAlloc(size, 16) : nullptr;
}

void opj_aligned_free(void* ptr) {
  pdfium::base::AlignedFree(ptr);
}

void* opj_aligned_32_malloc(size_t size) {
  return size ? pdfium::base::AlignedAlloc(size, 32) : nullptr;
}

void* opj_realloc(void* m, size_t s) {
  return FXMEM_DefaultRealloc(m, s);
}

void opj_free(void* m) {
  if (m)
    FXMEM_DefaultFree(m);
}

}  // extern "C"
