aboutsummaryrefslogtreecommitdiff
path: root/libbb
diff options
context:
space:
mode:
Diffstat (limited to 'libbb')
-rw-r--r--libbb/read_text_file_to_buffer.c38
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 000000000..ef64ad712
--- /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