help and version message on stdout, with exit(0) #283541

This commit is contained in:
albert 2005-01-05 20:29:26 +00:00
parent 2e78a17eda
commit aae3e72ab7
2 changed files with 30 additions and 15 deletions

1
NEWS
View File

@ -1,6 +1,7 @@
procps-3.2.4 --> procps-3.2.5 procps-3.2.4 --> procps-3.2.5
ps: security labels can contain any printable ASCII 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 procps-3.2.3 --> procps-3.2.4

44
top.c
View File

@ -316,8 +316,8 @@ static const char *tg2 (int x, int y)
/*###### Exit/Interrput routines #######################################*/ /*###### Exit/Interrput routines #######################################*/
// The usual program end -- called only by functions in this section. // 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 (FILE *fp, 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)
{ {
if (!Batch) if (!Batch)
tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty); tcsetattr(STDIN_FILENO, TCSAFLUSH, &Savedtty);
@ -330,7 +330,7 @@ static void bye_bye (int eno, const char *str)
//#define ATEOJ_REPORT //#define ATEOJ_REPORT
#ifdef ATEOJ_REPORT #ifdef ATEOJ_REPORT
fprintf(stderr, fprintf(fp,
"\n\tTerminal: %s" "\n\tTerminal: %s"
"\n\t device = %s, ncurses = v%s" "\n\t device = %s, ncurses = v%s"
"\n\t max_colors = %d, max_pairs = %d" "\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 , Max_lines, Pseudo_size
); );
fprintf(stderr, fprintf(fp,
#ifndef STDOUT_IOLBF #ifndef STDOUT_IOLBF
"\n\t Stdout_buf = %d, BUFSIZ = %u" "\n\t Stdout_buf = %d, BUFSIZ = %u"
#endif #endif
@ -373,7 +373,7 @@ static void bye_bye (int eno, const char *str)
, Curwin->rc.sortindx , Curwin->rc.sortindx
); );
fprintf(stderr, fprintf(fp,
"\n\tProgram" "\n\tProgram"
"\n\t Linux version = %u.%u.%u, %s" "\n\t Linux version = %u.%u.%u, %s"
"\n\t Hertz = %u (%u bytes, %u-bit time)" "\n\t Hertz = %u (%u bytes, %u-bit time)"
@ -392,13 +392,7 @@ static void bye_bye (int eno, const char *str)
#endif #endif
if (str) { if (str) fputs(str, fp);
if (eno) perror(str);
else {
fputs(str, stderr);
eno = 1;
}
}
exit(eno); exit(eno);
} }
@ -411,7 +405,7 @@ static void end_pgm (int dont_care_sig) NORETURN;
static void end_pgm (int dont_care_sig) static void end_pgm (int dont_care_sig)
{ {
(void)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); exit(1);
} }
/* not to worry, he'll change our exit code to 1 due to 'buf' */ /* 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; break;
case 'h': case 'H': case 'h': case 'H':
case 'v': case 'V': 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': case 'i':
TOGw(Curwin, Show_IDLEPS); TOGw(Curwin, Show_IDLEPS);
Curwin->rc.maxtasks = 0; Curwin->rc.maxtasks = 0;