SXXXXXXX_PyDownloadFwViaSRIO/_OLD/Vecchia_app/FpgaBeamMeUp/fileutils.cpp
2026-01-22 17:10:05 +01:00

65 lines
2.2 KiB
C++

#include <stdio.h>
#include <malloc.h>
#include "fileutils.h"
//***********************************************************************
// Returns a binary_data_t structure
// Input parameters: filename = file to open
//
// Returns: NULL = error in reading file
// binary_data_t = if success
//***********************************************************************
binary_data_t *read_file(const char *filename)
{
//Allocated our binary data structure
binary_data_t *binary_data = (binary_data_t*)malloc(sizeof(binary_data_t));
if (binary_data != NULL)
{
binary_data->size = 0;
void *buffer = NULL;
long position;
//Open the file for reading in binary mode
FILE *fIn = fopen(filename, "rb");
if (fIn != NULL)
{
//Go to the end of the file
const int fseek_end_value = fseek(fIn, 0, SEEK_END);
if (fseek_end_value != -1)
{
//Get the current position in the file (in bytes)
position = ftell(fIn);
if (position != -1)
{
//Go back to the beginning of the file
const int fseek_set_value = fseek(fIn, 0, SEEK_SET);
if (fseek_set_value != -1)
{
//Allocate enough space to read the whole file
buffer = malloc(position);
if (buffer != NULL)
{
//Read the whole file to buffer
const long size = fread(buffer, 1, position, fIn);
if (size == position)
{
binary_data->size = position;
binary_data->data = buffer;
fclose(fIn);
return binary_data;
}
free(buffer);
}
}
}
}
fclose(fIn);
}
free(binary_data);
}
return NULL;
}