/*

 * This file is part of the openHiTLS project.

 *

 * openHiTLS is licensed under the Mulan PSL v2.

 * You can use this software according to the terms and conditions of the Mulan PSL v2.

 * You may obtain a copy of Mulan PSL v2 at:

 *

 *     http://license.coscl.org.cn/MulanPSL2

 *

 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,

 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,

 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.

 * See the Mulan PSL v2 for more details.

 */



#include "test.h"



static volatile uint32_t g_malloc_called_idx = 0;

static volatile uint32_t g_malloc_failed_idx = 0;

static volatile bool g_malloc_fail_enabled = true;



void *STUB_BSL_SAL_Malloc(uint32_t size)

{

    uint32_t current_call_index = g_malloc_called_idx;

    g_malloc_called_idx = current_call_index + 1;



    if (g_malloc_fail_enabled && current_call_index == g_malloc_failed_idx) {

        return NULL;

    }



    return malloc(size);

}



void STUB_ResetMallocCount(void)

{

    g_malloc_called_idx = 0;

}



void STUB_SetMallocFailIndex(uint32_t failIdx)

{

    g_malloc_failed_idx = failIdx;

}



uint32_t STUB_GetMallocCallCount(void)

{

    return g_malloc_called_idx;

}



void STUB_EnableMallocFail(bool enable)

{

    g_malloc_fail_enabled = enable;

}