]> granicus.if.org Git - procps-ng/commitdiff
help and version message on stdout, with exit(0) #283541
authoralbert <>
Wed, 5 Jan 2005 20:29:26 +0000 (20:29 +0000)
committeralbert <>
Wed, 5 Jan 2005 20:29:26 +0000 (20:29 +0000)
NEWS
top.c

diff --git a/NEWS b/NEWS
index ed49f0d3300694a8868e371daa456c8d8b3aa36f..a8f0d5c418b9e9b2257e474f035d19d9766ba953 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,7 @@
 procps-3.2.4 --> procps-3.2.5
 
 ps: security labels can contain any printable ASCII
+top: help and version message on stdout, with exit(0)    #283541
 
 procps-3.2.3 --> procps-3.2.4
 
diff --git a/top.c b/top.c
index e4ae6b59f901bee6471aea3d149ae5d48efb6401..dcb6d08bbbbff37c9b10e4fac008dfa2117be497 100644 (file)
--- a/top.c
+++ b/top.c
@@ -316,8 +316,8 @@ static const char *tg2 (int x, int y)
 /*######  Exit/Interrput routines  #######################################*/
 
 // The usual program end -- called only by functions in this section.
-static void bye_bye (int eno, const char *str) NORETURN;
-static void bye_bye (int eno, const char *str)
+static void bye_bye (FILE *fp, int eno, const char *str) NORETURN;
+static void bye_bye (FILE *fp, int eno, const char *str)
 {
    if (!Batch)
       tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty);
@@ -330,7 +330,7 @@ static void bye_bye (int eno, const char *str)
 //#define ATEOJ_REPORT
 #ifdef ATEOJ_REPORT
 
-   fprintf(stderr,
+   fprintf(fp,
       "\n\tTerminal: %s"
       "\n\t   device = %s, ncurses = v%s"
       "\n\t   max_colors = %d, max_pairs = %d"
@@ -350,7 +350,7 @@ static void bye_bye (int eno, const char *str)
       , Max_lines, Pseudo_size
       );
 
-   fprintf(stderr,
+   fprintf(fp,
 #ifndef STDOUT_IOLBF
       "\n\t   Stdout_buf = %d, BUFSIZ = %u"
 #endif
@@ -373,7 +373,7 @@ static void bye_bye (int eno, const char *str)
       , Curwin->rc.sortindx
       );
 
-   fprintf(stderr,
+   fprintf(fp,
       "\n\tProgram"
       "\n\t   Linux version = %u.%u.%u, %s"
       "\n\t   Hertz = %u (%u bytes, %u-bit time)"
@@ -392,13 +392,7 @@ static void bye_bye (int eno, const char *str)
 
 #endif
 
-   if (str) {
-      if (eno) perror(str);
-      else {
-         fputs(str, stderr);
-         eno = 1;
-      }
-   }
+   if (str) fputs(str, fp);
    exit(eno);
 }
 
@@ -411,7 +405,7 @@ static void end_pgm (int dont_care_sig) NORETURN;
 static void end_pgm (int dont_care_sig)
 {
    (void)dont_care_sig;
-   bye_bye(0, NULL);
+   bye_bye(stdout, 1, NULL);
 }
 
 
@@ -432,7 +426,27 @@ static void std_err (const char *str)
       exit(1);
    }
       /* not to worry, he'll change our exit code to 1 due to 'buf' */
-   bye_bye(0, buf);
+   bye_bye(stderr, 1, buf);
+}
+
+
+        /*
+         * Standard out handler */
+static void std_out (const char *str) NORETURN;
+static void std_out (const char *str)
+{
+   static char buf[SMLBUFSIZ];
+
+   fflush(stdout);
+   /* we'll use our own buffer so callers can still use fmtmk() and, yes the
+      leading tab is not the standard convention, but the standard is wrong
+      -- OUR msg won't get lost in screen clutter, like so many others! */
+   snprintf(buf, sizeof(buf), "\t%s: %s\n", Myname, str);
+   if (!Ttychanged) {
+      fprintf(stdout, "%s\n", buf);
+      exit(0);
+   }
+   bye_bye(stdout, 0, buf);
 }
 
 
@@ -1720,7 +1734,7 @@ static void parse_args (char **args)
                break;
             case 'h': case 'H':
             case 'v': case 'V':
-               std_err(fmtmk("%s\nusage:\t%s%s", procps_version, Myname, usage));
+               std_out(fmtmk("%s\nusage:\t%s%s", procps_version, Myname, usage));
             case 'i':
                TOGw(Curwin, Show_IDLEPS);
                Curwin->rc.maxtasks = 0;