summaryrefslogtreecommitdiffstats
path: root/src/Backtrace/fallback.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Backtrace/fallback.c')
-rw-r--r--src/Backtrace/fallback.c30
1 files changed, 2 insertions, 28 deletions
diff --git a/src/Backtrace/fallback.c b/src/Backtrace/fallback.c
index b77a7cb..70e5e43 100644
--- a/src/Backtrace/fallback.c
+++ b/src/Backtrace/fallback.c
@@ -19,9 +19,6 @@
#include <stdlib.h>
#include <stdbool.h>
-/* Too large files are trimmed. */
-#define FILE_SIZE_LIMIT 10000000 /* ~ 10 MB */
-
struct header
{
struct strbuf *text;
@@ -70,30 +67,8 @@ static void header_set_insert(struct header *cur, struct strbuf *new)
header_set_insert(cur->next, new);
}
-struct strbuf *independent_backtrace(FILE *fp)
+struct strbuf *independent_backtrace(char *input)
{
- long pos = ftell(fp);
- fseek(fp, 0, SEEK_END);
- long size = ftell(fp) - pos;
- fseek(fp, pos, SEEK_SET);
-
- /* Silently handle large files. */
- if (size > FILE_SIZE_LIMIT)
- size = FILE_SIZE_LIMIT;
-
- char *contents = malloc(size);
- if (!contents)
- {
- puts("Error while allocating memory for independent backtrace.");
- exit(5);
- }
-
- if (fread(contents, size, 1, fp) != 1)
- {
- puts("Error while reading input file.");
- exit(6);
- }
-
struct strbuf *header = strbuf_new();
bool in_bracket = false;
bool in_quote = false;
@@ -104,7 +79,7 @@ struct strbuf *independent_backtrace(FILE *fp)
bool has_bracket = false;
struct header *headers = NULL;
- const char *bk = contents;
+ const char *bk = input;
while (*bk)
{
if (bk[0] == '#'
@@ -179,7 +154,6 @@ struct strbuf *independent_backtrace(FILE *fp)
}
strbuf_free(header);
- free(contents);
struct strbuf *result = strbuf_new();
struct header *loop = headers;