feat: modularize reader

This commit is contained in:
Ahurac 2024-09-26 15:03:04 +00:00
parent 5a0ce6d53c
commit 783e95a6ad
2 changed files with 41 additions and 0 deletions

33
src/reader.c Normal file
View file

@ -0,0 +1,33 @@
#include "reader.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *read_a_line(FILE *file_to_read) {
size_t initial_buffer_size = 64;
size_t buffer_size = initial_buffer_size;
unsigned int how_many_characters_to_read = buffer_size + 1;
char *input_buffer = malloc(how_many_characters_to_read);
char *initial_buffer_position = input_buffer;
while (fgets(input_buffer, how_many_characters_to_read, file_to_read) !=
NULL &&
input_buffer[strlen(input_buffer) - 1] != '\n') {
size_t new_buffer_size = buffer_size * 2;
if (buffer_size != initial_buffer_size) {
how_many_characters_to_read = buffer_size + 1;
}
input_buffer = realloc(initial_buffer_position, new_buffer_size + 1);
initial_buffer_position = input_buffer;
input_buffer += buffer_size;
buffer_size = new_buffer_size;
}
input_buffer = initial_buffer_position;
if (!feof(file_to_read)) {
return input_buffer;
} else {
return NULL;
}
}

8
src/reader.h Normal file
View file

@ -0,0 +1,8 @@
#ifndef READER_H
#define READER_H
#include <stdio.h>
char *read_a_line(FILE *file_to_read);
#endif /* READER_H */