From 2d1cfb1f1c90fe4cbd2eec4da79484f8727dd670 Mon Sep 17 00:00:00 2001 From: Mitja Felicijan Date: Wed, 8 Nov 2023 23:53:20 +0100 Subject: Basic reading of files --- file.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ file.h | 13 +++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 file.c create mode 100644 file.h diff --git a/file.c b/file.c new file mode 100644 index 0000000..d05681d --- /dev/null +++ b/file.c @@ -0,0 +1,44 @@ +#include +#include + +#include "file.h" + +struct FileContent read_entire_file(const char *file_path) { + struct FileContent file_data; + file_data.content = NULL; + file_data.count = 0; + + FILE *file = fopen(file_path, "rb"); + if (file == NULL) { + perror("Error opening file"); + return file_data; + } + + fseek(file, 0, SEEK_END); + long file_size = ftell(file); + fseek(file, 0, SEEK_SET); + + if (file_size == -1) { + perror("Error getting file size"); + return file_data; + } + + file_data.content = (const char *)malloc(file_size); + if (file_data.content == NULL) { + perror("Error allocating memory"); + return file_data; + } + + size_t bytes_read = fread((void *)file_data.content, 1, file_size, file); + if (bytes_read != (size_t)file_size) { + perror("Error reading file"); + free((void *)file_data.content); + file_data.content = NULL; + return file_data; + } + + file_data.count = bytes_read; + + fclose(file); + return file_data; +} diff --git a/file.h b/file.h new file mode 100644 index 0000000..31a6e7d --- /dev/null +++ b/file.h @@ -0,0 +1,13 @@ +#ifndef FILE_H +#define FILE_H + +#include + +struct FileContent { + const char *content; + size_t count; +}; + +struct FileContent read_entire_file(const char *file_path); + +#endif -- cgit v1.2.3