From dfdc7bf94a6ec3e5362eb2982d5c5c31edee4239 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Mon, 18 Jan 2021 00:14:01 -0800 Subject: Fixed error printing code --- bp.c | 6 ++++-- files.c | 4 ++-- print.c | 6 ++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/bp.c b/bp.c index fa137b0..13fc4db 100644 --- a/bp.c +++ b/bp.c @@ -270,7 +270,8 @@ static int inplace_modify_file(def_t *defs, file_t *f, pat_t *pattern) confirm_t confirm_file = confirm; for (match_t *m = NULL; (m = next_match(defs, f, m, pattern, ignorecase)); ) { ++matches; - if (print_errors(&pr, m) > 0) + printer_t err_pr = {.file = f, .context_lines = 1, .use_color = 1, .print_line_numbers = 1}; + if (print_errors(&err_pr, m) > 0) exit(1); // Lazy-open file for writing upon first match: if (inplace_file == NULL) { @@ -325,7 +326,8 @@ static int print_matches(def_t *defs, file_t *f, pat_t *pattern) confirm_t confirm_file = confirm; for (match_t *m = NULL; (m = next_match(defs, f, m, pattern, ignorecase)); ) { - if (print_errors(&pr, m) > 0) + printer_t err_pr = {.file = f, .context_lines = 1, .use_color = 1, .print_line_numbers = 1}; + if (print_errors(&err_pr, m) > 0) exit(1); if (++matches == 1) { diff --git a/files.c b/files.c index 014bce2..f6c1c1f 100644 --- a/files.c +++ b/files.c @@ -213,7 +213,7 @@ void fprint_line(FILE *dest, file_t *f, const char *start, const char *end, cons size_t linenum = get_line_number(f, start); const char *line = get_line(f, linenum); size_t charnum = get_char_number(f, start); - fprintf(dest, "\033[1m%s:%ld:\033[0m ", f->filename, linenum); + fprintf(dest, "\033[1m%s:%ld:\033[0m ", f->filename[0] ? f->filename : "stdin", linenum); va_list args; va_start(args, fmt); @@ -227,7 +227,7 @@ void fprint_line(FILE *dest, file_t *f, const char *start, const char *end, cons linenum, (int)charnum - 1, line, (int)(end - &line[charnum-1]), &line[charnum-1], - (int)(eol - end), end); + (int)(eol - end - 1), end); fprintf(dest, " \033[34;1m"); const char *p = line - 1; for (; p < start; ++p) fputc(' ', dest); diff --git a/print.c b/print.c index b21a3ea..264e6c2 100644 --- a/print.c +++ b/print.c @@ -378,9 +378,11 @@ void print_match(FILE *out, printer_t *pr, match_t *m) int print_errors(printer_t *pr, match_t *m) { int ret = 0; - if (m->pat->type == BP_CAPTURE && m->pat->args.capture.name && streq(m->pat->args.capture.name, "!")) { + if (m->pat->type == BP_CAPTURE && m->pat->args.capture.name + && strncmp(m->pat->args.capture.name, "!", m->pat->args.capture.namelen) == 0) { printf("\033[31;1m"); - print_match(stdout, pr, m); + printer_t tmp = {.file = pr->file}; // No bells and whistles + print_match(stdout, &tmp, m); // Error message printf("\033[0m\n"); fprint_line(stdout, pr->file, m->start, m->end, " "); return 1; -- cgit v1.2.3