]> granicus.if.org Git - procps-ng/commitdiff
top: fix a fix for the 'bye_bye' function (merge #127)
authorJim Warner <james.warner@comcast.net>
Mon, 21 Jun 2021 05:00:00 +0000 (00:00 -0500)
committerCraig Small <csmall@dropbear.xyz>
Wed, 23 Jun 2021 08:23:49 +0000 (18:23 +1000)
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 <james.warner@comcast.net>
top/top.c

index 69b218b79a46089a6270fcba35b455b64d7fc633..04e756549b1fb249e50f0a4ef86cabe18d37bcbd 100644 (file)
--- 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