From: Glenn L McGrath Date: Sun, 15 Apr 2001 12:36:19 +0000 (-0000) Subject: Read a FILE* till an empty line or eof and return it as a char buffer. X-Git-Tag: 0_52~352 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=65708e4cd1b234501aec3af0970f21ad6736aa44;p=oweals%2Fbusybox.git Read a FILE* till an empty line or eof and return it as a char buffer. In future maybe add char *end_str to interface to allow calling function to specify end point. --- diff --git a/libbb/read_text_file_to_buffer.c b/libbb/read_text_file_to_buffer.c new file mode 100644 index 000000000..ef64ad712 --- /dev/null +++ b/libbb/read_text_file_to_buffer.c @@ -0,0 +1,38 @@ +#include +#include +#include +#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