diff options
Diffstat (limited to 'src/utils.c')
| -rw-r--r-- | src/utils.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..5adbd0f --- /dev/null +++ b/src/utils.c @@ -0,0 +1,53 @@ +#include <stdio.h> +#include <stdlib.h> +#include "utils.h" + +char * +read_file_contents(char *file_path) +{ + FILE *file; + int file_size; + + file = fopen(file_path, "r"); + if (file == NULL) { + perror("fopen"); + return NULL; + } + + if (fseek(file, 0, SEEK_END) == -1) { + perror("fseek SEEK_END"); + fclose(file); + return NULL; + } + + if ((file_size = ftell(file)) == -1) { + perror("ftell"); + fclose(file); + return NULL; + } + + if (fseek(file, 0, SEEK_SET) == -1) { + perror("fseek 0 SEEK_SET"); + fclose(file); + return NULL; + } + + char *file_content = (char *)calloc(file_size + 1, sizeof(char)); + if (file_content == NULL) { + fprintf(stderr, "Could not allocate mem for file_content\n"); + fclose(file); + return NULL; + } + + size_t ret = fread(file_content, sizeof(char), file_size, file); + if (ret == 0 && ferror(file) != 0) { + perror("fread"); + free(file_content); + fclose(file); + return NULL; + } + + fclose(file); + + return file_content; +} |
