From 27e60e86e9f5b85520da001422176700fc9d824a Mon Sep 17 00:00:00 2001 From: Jim Warner Date: Mon, 21 Jun 2021 00:00:00 -0500 Subject: [PATCH] top: fix a fix for the 'bye_bye' function (merge #127) In the merge request shown below, 1 too many bytes are written to stdout thus including the terminating null. As the cure, this commit just reduces the length by 1. [ along the way, we will remove some unneeded braces ] [ plus add some additional comments with attribution ] Reference(s): https://gitlab.com/procps-ng/procps/-/merge_requests/127 . original ported cchange commit 6b8980a3b6279058d727377e914cfb6439d6f178 Signed-off-by: Jim Warner --- top/top.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/top/top.c b/top/top.c index 69b218b7..04e75654 100644 --- a/top/top.c +++ b/top/top.c @@ -415,13 +415,19 @@ static void bye_bye (const char *str) { procps_pids_unref(&Pids_ctx); procps_stat_unref(&Stat_ctx); + /* we'll only have a 'str' if called by error_exit() | + not ever from the sig_endpgm() signal handler ... | */ if (str) { fputs(str, stderr); exit(EXIT_FAILURE); } - if (Batch) { - write(fileno(stdout), "\n", sizeof("\n")); - } + /* this could happen when called from several places | + including that sig_endpgm(). thus we must use an | + async-signal-safe write function just in case ... | + (thanks: Shaohua Zhan shaohua.zhan@windriver.com) | */ + if (Batch) + write(fileno(stdout), "\n", sizeof("\n") - 1); + exit(EXIT_SUCCESS); } // end: bye_bye -- 2.40.0