/**
 * Defines utility functions for testing CPER-JSON IR output from the cper-parse library.
 * 
 * Author: Lawrence.Tang@arm.com
 **/

#include <stdio.h>
#include <stdlib.h>
#include "test-utils.hpp"
extern "C" {
#include "../edk/BaseTypes.h"
#include "../generator/cper-generate.h"
}

//Returns a ready-for-use memory stream containing a CPER record with the given sections inside.
FILE* generate_record_memstream(const char** types, UINT16 num_types, char** buf, size_t* buf_size)
{
    //Open a memory stream.
    FILE* stream = open_memstream(buf, buf_size);

    //Generate a section to the stream, close & return.
    generate_cper_record((char**)types, num_types, stream);
    fclose(stream);

    //Return fmemopen() buffer for reading.
    return fmemopen(*buf, *buf_size, "r");
}