diff options
Diffstat (limited to 'libbb/read_text_file_to_buffer.c')
-rw-r--r-- | libbb/read_text_file_to_buffer.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/libbb/read_text_file_to_buffer.c b/libbb/read_text_file_to_buffer.c new file mode 100644 index 0000000..ef64ad7 --- /dev/null +++ b/libbb/read_text_file_to_buffer.c @@ -0,0 +1,38 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include "libbb.h" + +/* + * Reads consecutive lines from file line that start with end_string + * read finishes at an empty line or eof + */ +extern char *read_text_file_to_buffer(FILE *src_file) +{ + char *line = NULL; + char *buffer = NULL; + int buffer_length = 0; + int line_length = 0; + + buffer = xmalloc(1); + strcpy(buffer, ""); + + /* Loop until line is empty, or just one char, which will be '\n' */ + do { + line = get_line_from_file(src_file); + if (line == NULL) { + break; + } + line_length = strlen(line); + buffer_length += line_length + 1; + buffer = (char *) xrealloc(buffer, buffer_length + 1); + strcat(buffer, line); + free(line); + } while (line_length > 1); + + if (strlen(buffer) == 0) { + return(NULL); + } else { + return(strdup(buffer)); + } +}
\ No newline at end of file |