diff options
author | Kacper Michajłow <kasper93@gmail.com> | 2023-10-19 03:55:33 +0200 |
---|---|---|
committer | Dudemanguy <random342@airmail.cc> | 2023-11-08 21:55:08 +0000 |
commit | 5c3faf71e8c5ee2b105ffdcf02f39f4673764117 (patch) | |
tree | 50205e0cfcf34eaf8c2691969cad19eecdd46366 /common | |
parent | 773f72e6c64182ce553d4b0759934f662882685c (diff) | |
download | mpv-5c3faf71e8c5ee2b105ffdcf02f39f4673764117.tar.bz2 mpv-5c3faf71e8c5ee2b105ffdcf02f39f4673764117.tar.xz |
msg: factor out print code
Will be useful for next commit.
Diffstat (limited to 'common')
-rw-r--r-- | common/msg.c | 113 |
1 files changed, 61 insertions, 52 deletions
diff --git a/common/msg.c b/common/msg.c index e4a81d2da4..7d9161e12c 100644 --- a/common/msg.c +++ b/common/msg.c @@ -76,7 +76,7 @@ struct mp_log_root { FILE *stats_file; bstr buffer; bstr term_msg; - bstr term_msg_prefix; + bstr term_msg_tmp; // --- must be accessed atomically /* This is incremented every time the msglevels must be reloaded. * (This is perhaps better than maintaining a globally accessible and @@ -449,6 +449,60 @@ static void dump_stats(struct mp_log *log, int lev, bstr text) fprintf(root->stats_file, "%"PRId64" %.*s\n", mp_time_ns(), BSTR_P(text)); } +static void write_term_msg(struct mp_log *log, int lev, bstr text, bstr *out) +{ + struct mp_log_root *root = log->root; + bool print_term = test_terminal_level(log, lev); + int fileno = term_msg_fileno(root, lev); + int term_w = 0, term_h = 0; + if (print_term && root->isatty[fileno]) + terminal_get_size(&term_w, &term_h); + + out->len = 0; + + // Split away each line. Normally we require full lines; buffer partial + // lines if they happen. + root->term_msg_tmp.len = 0; + int term_msg_lines = 0; + + bstr str = text; + while (str.len) { + bstr line = bstr_getline(str, &str); + if (line.start[line.len - 1] != '\n') { + assert(str.len == 0); + str = line; + break; + } + + if (print_term) { + int line_w; + append_terminal_line(log, lev, line, &root->term_msg_tmp, &line_w); + term_msg_lines += (!line_w || !term_w) + ? 1 : (line_w + term_w - 1) / term_w; + } + write_msg_to_buffers(log, lev, line); + } + + if (lev == MSGL_STATUS && print_term) { + int line_w = 0; + if (str.len) + append_terminal_line(log, lev, str, &root->term_msg_tmp, &line_w); + term_msg_lines += !term_w ? (str.len ? 1 : 0) + : (line_w + term_w - 1) / term_w; + } else if (str.len) { + bstr_xappend(NULL, &log->partial[lev], str); + } + + if (print_term && (root->term_msg_tmp.len || lev == MSGL_STATUS)) { + prepare_prefix(root, out, lev, term_msg_lines); + if (root->color[fileno] && root->term_msg_tmp.len) { + set_msg_color(root, out, lev); + set_term_color(root, &root->term_msg_tmp, -1); + } + bstr_xappend(root, out, root->term_msg_tmp); + } +} + void mp_msg_va(struct mp_log *log, int lev, const char *format, va_list va) { if (!mp_msg_test(log, lev)) @@ -471,58 +525,13 @@ void mp_msg_va(struct mp_log *log, int lev, const char *format, va_list va) } else if (lev == MSGL_STATUS && !test_terminal_level(log, lev)) { /* discard */ } else { - bool print_term = test_terminal_level(log, lev); - int fileno = term_msg_fileno(root, lev); - int term_w = 0, term_h = 0; - if (print_term && root->isatty[fileno]) - terminal_get_size(&term_w, &term_h); - - // Split away each line. Normally we require full lines; buffer partial - // lines if they happen. - root->term_msg.len = 0; - int term_msg_lines = 0; - - bstr str = root->buffer; - while (str.len) { - bstr line = bstr_getline(str, &str); - if (line.start[line.len - 1] != '\n') { - assert(str.len == 0); - str = line; - break; - } - - if (print_term) { - int line_w; - append_terminal_line(log, lev, line, &root->term_msg, &line_w); - term_msg_lines += (!line_w || !term_w) - ? 1 : (line_w + term_w - 1) / term_w; - } - write_msg_to_buffers(log, lev, line); - } + write_term_msg(log, lev, root->buffer, &root->term_msg); - if (lev == MSGL_STATUS && print_term) { - int line_w = 0; - if (str.len) - append_terminal_line(log, lev, str, &root->term_msg, &line_w); - term_msg_lines += !term_w ? (str.len ? 1 : 0) - : (line_w + term_w - 1) / term_w; - } else if (str.len) { - bstr_xappend(NULL, &log->partial[lev], str); - } - - if (print_term && (root->term_msg.len || lev == MSGL_STATUS)) { - prepare_prefix(root, &root->term_msg_prefix, lev, term_msg_lines); - if (root->color[fileno] && root->term_msg.len) { - set_msg_color(root, &root->term_msg_prefix, lev); - set_term_color(root, &root->term_msg, -1); - } - - FILE *stream = fileno == STDERR_FILENO ? stderr : stdout; - if (root->term_msg_prefix.len || root->term_msg.len) { - fprintf(stream, "%.*s%.*s", BSTR_P(root->term_msg_prefix), - BSTR_P(root->term_msg)); - fflush(stream); - } + int fileno = term_msg_fileno(root, lev); + FILE *stream = fileno == STDERR_FILENO ? stderr : stdout; + if (root->term_msg.len) { + fprintf(stream, "%.*s", BSTR_P(root->term_msg)); + fflush(stream); } } |