diff --git a/src/reader.c b/src/reader.c new file mode 100644 index 0000000..3fc4b8e --- /dev/null +++ b/src/reader.c @@ -0,0 +1,33 @@ +#include "reader.h" + +#include +#include +#include + +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; + } +} diff --git a/src/reader.h b/src/reader.h new file mode 100644 index 0000000..6cd61b1 --- /dev/null +++ b/src/reader.h @@ -0,0 +1,8 @@ +#ifndef READER_H +#define READER_H + +#include + +char *read_a_line(FILE *file_to_read); + +#endif /* READER_H */