summaryrefslogtreecommitdiff
path: root/file.c
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2023-11-08 23:53:20 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2023-11-08 23:53:20 +0100
commit2d1cfb1f1c90fe4cbd2eec4da79484f8727dd670 (patch)
tree7ea956b53e632b915388d8ef44fa560326a9c30a /file.c
parentf71732e188c847cd92d83f94902d57d0ed4d42fb (diff)
downloadcrep-2d1cfb1f1c90fe4cbd2eec4da79484f8727dd670.tar.gz
Basic reading of files
Diffstat (limited to 'file.c')
-rw-r--r--file.c44
1 files changed, 44 insertions, 0 deletions
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 <stdio.h>
+#include <stdlib.h>
+
+#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;
+}