From: Linus Arver <linusa@xxxxxxxxxx> Previously, these variables were overloaded to act as the end of the log message even if no trailers were found. Remove the overloaded meaning by adding a new end_of_log_message field to the trailer_info struct. The trailer_info struct consumers now only refer to the trailer_block_start and trailer_block_end fields if trailers were found (trailer_nr > 0), and otherwise refer to the end_of_log_message. Signed-off-by: Linus Arver <linusa@xxxxxxxxxx> --- trailer.c | 31 +++++++++++++++++++++++-------- trailer.h | 12 +++++++----- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/trailer.c b/trailer.c index 471c2722536..9a3837be770 100644 --- a/trailer.c +++ b/trailer.c @@ -1086,9 +1086,14 @@ void process_trailers(const char *file, parse_trailers(&info, sb.buf, &head, opts); - /* Print the lines before the trailers */ - if (!opts->only_trailers) - fwrite(sb.buf, 1, info.trailer_block_start, outfile); + /* Print the lines before the trailers (if any) as is. */ + if (!opts->only_trailers) { + if (info.trailer_nr) { + fwrite(sb.buf, 1, info.trailer_block_start, outfile); + } else { + fwrite(sb.buf, 1, info.end_of_log_message, outfile); + } + } if (!opts->only_trailers && !info.blank_line_before_trailer) fprintf(outfile, "\n"); @@ -1108,9 +1113,14 @@ void process_trailers(const char *file, free_all(&head); trailer_info_release(&info); - /* Print the lines after the trailers as is */ - if (!opts->only_trailers) - fwrite(sb.buf + info.trailer_block_end, 1, sb.len - info.trailer_block_end, outfile); + /* Print the lines after the trailers (if any) as is. */ + if (!opts->only_trailers) { + if (info.trailer_nr) { + fwrite(sb.buf + info.trailer_block_end, 1, sb.len - info.trailer_block_end, outfile); + } else { + fwrite(sb.buf + info.end_of_log_message, 1, sb.len - info.end_of_log_message, outfile); + } + } if (opts->in_place) if (rename_tempfile(&trailers_tempfile, file)) @@ -1156,8 +1166,13 @@ void trailer_info_get(struct trailer_info *info, const char *str, info->blank_line_before_trailer = ends_with_blank_line(str, trailer_block_start); - info->trailer_block_start = trailer_block_start; - info->trailer_block_end = end_of_log_message; + info->trailer_block_start = 0; + info->trailer_block_end = 0; + if (nr) { + info->trailer_block_start = trailer_block_start; + info->trailer_block_end = end_of_log_message; + } + info->end_of_log_message = end_of_log_message; info->trailers = trailer_strings; info->trailer_nr = nr; } diff --git a/trailer.h b/trailer.h index 4dcb9080327..5e2843d320a 100644 --- a/trailer.h +++ b/trailer.h @@ -38,14 +38,16 @@ struct trailer_info { /* * Offsets to the trailer block start and end positions in the input - * string. If no trailer block is found, these are both set to the - * "true" end of the input, per find_true_end_of_input(). - * - * NOTE: This will be changed so that these point to 0 in the next - * patch if no trailers are found. + * string. If no trailer block is found, these are set to 0. */ size_t trailer_block_start, trailer_block_end; + /* + * Offset to the end of the log message in the input (may not be the + * same as the end of the input). + */ + size_t end_of_log_message; + /* * Array of trailers found. */ -- gitgitgadget