summaryrefslogtreecommitdiffstats
path: root/misc-utils/kill.c
diff options
context:
space:
mode:
authorSami Kerola2013-03-06 23:53:36 +0100
committerKarel Zak2013-03-12 14:42:21 +0100
commit44e5fcddc0b510c21bb050a471530f1d8c538d69 (patch)
treeab01bce8d09202eafac93aecf8daf5140931196a /misc-utils/kill.c
parentkill: align with howto-usage-function.txt (diff)
downloadkernel-qcow2-util-linux-44e5fcddc0b510c21bb050a471530f1d8c538d69.tar.gz
kernel-qcow2-util-linux-44e5fcddc0b510c21bb050a471530f1d8c538d69.tar.xz
kernel-qcow2-util-linux-44e5fcddc0b510c21bb050a471530f1d8c538d69.zip
kill: use libc error printing facilities and exit values
Signed-off-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/kill.c')
-rw-r--r--misc-utils/kill.c56
1 files changed, 24 insertions, 32 deletions
diff --git a/misc-utils/kill.c b/misc-utils/kill.c
index 7b53593ac..bce3348c9 100644
--- a/misc-utils/kill.c
+++ b/misc-utils/kill.c
@@ -148,8 +148,6 @@ static void printsignals (FILE *fp);
static int usage (int status);
static int kill_verbose (char *procname, int pid, int sig);
-static char *progname;
-
#ifdef HAVE_SIGQUEUE
static int use_sigval;
static union sigval sigdata;
@@ -158,21 +156,17 @@ static union sigval sigdata;
int main (int argc, char *argv[])
{
int errors, numsig, pid;
- char *ep, *arg, *p;
+ char *ep, *arg;
int do_pid, do_kill, check_all;
int *pids, *ip;
- progname = argv[0];
- if ((p = strrchr(progname, '/')) != NULL)
- progname = p+1;
-
setlocale(LC_ALL, "");
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);
atexit(close_stdout);
numsig = SIGTERM;
- do_pid = (! strcmp (progname, "pid")); /* Yecch */
+ do_pid = (! strcmp (program_invocation_short_name, "pid")); /* Yecch */
do_kill = 0;
check_all = 0;
@@ -191,10 +185,10 @@ int main (int argc, char *argv[])
if (! strcmp (arg, "-v") || ! strcmp (arg, "-V") ||
! strcmp (arg, "--version")) {
printf(UTIL_LINUX_VERSION);
- return 0;
+ return EXIT_SUCCESS;
}
if (! strcmp (arg, "-h") || ! strcmp (arg, "--help"))
- return usage(0);
+ return usage(EXIT_FAILURE);
if (! strcmp (arg, "-a") || ! strcmp (arg, "--all")) {
check_all++;
@@ -203,44 +197,42 @@ int main (int argc, char *argv[])
if (! strcmp (arg, "-l") || ! strcmp (arg, "--list")) {
if (argc < 2) {
printsignals (stdout);
- return 0;
+ return EXIT_SUCCESS;
}
if (argc > 2) {
- return usage (1);
+ return usage (EXIT_FAILURE);
}
/* argc == 2, accept "kill -l $?" */
arg = argv[1];
- if ((numsig = arg_to_signum (arg, 1)) < 0) {
- fprintf (stderr, _("%s: unknown signal %s\n"), progname, arg);
- return 1;
- }
+ if ((numsig = arg_to_signum (arg, 1)) < 0)
+ errx(EXIT_FAILURE, _("unknown signal: %s"), arg);
printsig (numsig);
- return 0;
+ return EXIT_SUCCESS;
}
if (! strcmp (arg, "-p") || ! strcmp (arg, "--pid")) {
do_pid++;
if (do_kill)
- return usage (1);
+ return usage (EXIT_FAILURE);
continue;
}
if (! strcmp (arg, "-s") || ! strcmp (arg, "--signal")) {
if (argc < 2) {
- return usage (1);
+ return usage (EXIT_FAILURE);
}
do_kill++;
if (do_pid)
- return usage (1);
+ return usage (EXIT_FAILURE);
argc--, argv++;
arg = *argv;
if ((numsig = arg_to_signum (arg, 0)) < 0) {
nosig (arg);
- return 1;
+ return EXIT_FAILURE;
}
continue;
}
if (! strcmp (arg, "-q") || ! strcmp (arg, "--queue")) {
if (argc < 2)
- return usage (1);
+ return usage (EXIT_FAILURE);
argc--, argv++;
arg = *argv;
#ifdef HAVE_SIGQUEUE
@@ -259,16 +251,16 @@ int main (int argc, char *argv[])
break;
arg++;
if ((numsig = arg_to_signum (arg, 0)) < 0) {
- return usage (1);
+ return usage (EXIT_FAILURE);
}
do_kill++;
if (do_pid)
- return usage (1);
+ return usage (EXIT_FAILURE);
continue;
}
if (! *argv) {
- return usage (1);
+ return usage (EXIT_FAILURE);
}
if (do_pid) {
numsig = -1;
@@ -277,7 +269,7 @@ int main (int argc, char *argv[])
/* we're done with the options.
the rest of the arguments should be process ids and names.
kill them. */
- for (errors = 0; (arg = *argv) != NULL; argv++) {
+ for (errors = EXIT_SUCCESS; (arg = *argv) != NULL; argv++) {
pid = strtol (arg, &ep, 10);
if (! *ep)
errors += kill_verbose (arg, pid, numsig);
@@ -285,8 +277,7 @@ int main (int argc, char *argv[])
pids = get_pids (arg, check_all);
if (! pids) {
errors++;
- fprintf (stderr, _("%s: can't find process \"%s\"\n"),
- progname, arg);
+ warnx (_("cannot find process \"%s\""), arg);
continue;
}
for (ip = pids; *ip >= 0; ip++)
@@ -294,7 +285,9 @@ int main (int argc, char *argv[])
free (pids);
}
}
- return (errors);
+ if (errors != EXIT_SUCCESS)
+ errors = EXIT_FAILURE;
+ return errors;
}
#ifdef SIGRTMIN
@@ -365,7 +358,7 @@ static int arg_to_signum (char *arg, int maskbit)
static void nosig (char *name)
{
- fprintf (stderr, _("%s: unknown signal %s; valid signals:\n"), progname, name);
+ warnx (_("unknown signal %s; valid signals:"), name);
printsignals (stderr);
}
@@ -445,8 +438,7 @@ static int kill_verbose (char *procname, int pid, int sig)
rc = kill (pid, sig);
if (rc < 0) {
- fprintf (stderr, "%s ", progname);
- perror (procname);
+ warn(_("sending signal to %s failed"), procname);
return 1;
}
return 0;