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.
This commit is contained in:
parent
4a2e463525
commit
65708e4cd1
38
libbb/read_text_file_to_buffer.c
Normal file
38
libbb/read_text_file_to_buffer.c
Normal file
@ -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));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user