From eba8dbcbe547b19cd44250fbc3f996052ae48239 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sat, 20 Jan 2018 16:53:12 -0700 Subject: [PATCH] exit inner copying loop at the start of a new file entry --- lib-src/etags.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/lib-src/etags.c b/lib-src/etags.c index 92cc190f3e6..1fa0447791b 100644 --- a/lib-src/etags.c +++ b/lib-src/etags.c @@ -1680,21 +1680,21 @@ static void copy_entries_from_old_file (FILE *old_file, const char *old_filename, FILE *out_file) { linebuffer line; + bool keep_going = true; need_filebuf = false; linebuffer_init (&line); - while (true) + + if (readline_internal (&line, old_file, old_filename) <= 0 + || line.len < 1 || !strneq (line.buffer, "\f", 1)) + goto error; + + while (keep_going) { char *comma, *filename; bool should_copy; - if (readline_internal (&line, old_file, old_filename) <= 0) - break; - - if (line.len < 1 || !strneq (line.buffer, "\f", 1)) - goto error; - if (readline_internal (&line, old_file, old_filename) <= 0) goto error; @@ -1716,13 +1716,19 @@ copy_entries_from_old_file (FILE *old_file, const char *old_filename, FILE *out_ while (true) { if (readline_internal (&line, old_file, old_filename) <= 0) - break; + { + keep_going = false; + break; + } if (should_copy) { fwrite (line.buffer, line.len, 1, out_file); fputs ("\n", out_file); } + + if (line.len < 0 || strneq (line.buffer, "\f", 1)) + break; } } -- 2.39.5