From d4eafec4d2a8fcc1442a3dee983fb32d1c076274 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Wed, 21 Sep 2011 21:15:53 +0200 Subject: flock: use libc error printing facilities Retire global progname variable and use warn{,x} and err{,x} functions. As a side effect of using err function the occurences of err variable had to be converted to referrals to errno variable. Signed-off-by: Sami Kerola --- sys-utils/flock.c | 65 +++++++++++++++++++------------------------------------ 1 file changed, 22 insertions(+), 43 deletions(-) (limited to 'sys-utils/flock.c') diff --git a/sys-utils/flock.c b/sys-utils/flock.c index 356c8ec78..334d2a899 100644 --- a/sys-utils/flock.c +++ b/sys-utils/flock.c @@ -39,17 +39,17 @@ #include #include +#include "c.h" #include "nls.h" -const char *program; - static void usage(int ex) { fputs(_("\nUsage:\n"), stderr); fprintf(stderr, _(" %1$s [-sxun][-w #] fd#\n" " %1$s [-sxon][-w #] file [-c] command...\n" - " %1$s [-sxon][-w #] directory [-c] command...\n"), program); + " %1$s [-sxon][-w #] directory [-c] command...\n"), + program_invocation_short_name); fputs(_("\nOptions:\n"), stderr); fputs(_(" -s --shared Get a shared lock\n" @@ -108,7 +108,6 @@ int main(int argc, char *argv[]) int fd = -1; int opt, ix; int do_close = 0; - int err; int status; char *eon; char **cmd_argv = NULL, *sh_c_argv[4]; @@ -133,8 +132,6 @@ int main(int argc, char *argv[]) bindtextdomain(PACKAGE, LOCALEDIR); textdomain(PACKAGE); - program = argv[0]; - if (argc < 2) usage(EX_USAGE); @@ -183,12 +180,10 @@ int main(int argc, char *argv[]) /* Run command */ if (!strcmp(argv[optind + 1], "-c") || !strcmp(argv[optind + 1], "--command")) { - if (argc != optind + 3) { - fprintf(stderr, - _("%s: %s requires exactly one command argument\n"), - program, argv[optind + 1]); - exit(EX_USAGE); - } + if (argc != optind + 3) + errx(EX_USAGE, + _("%s requires exactly one command argument"), + argv[optind + 1]); cmd_argv = sh_c_argv; cmd_argv[0] = getenv("SHELL"); if (!cmd_argv[0] || !*cmd_argv[0]) @@ -213,12 +208,10 @@ int main(int argc, char *argv[]) fd = open(filename, O_RDONLY | O_NOCTTY); if (fd < 0) { - err = errno; - fprintf(stderr, _("%s: cannot open lock file %s: %s\n"), - program, argv[optind], strerror(err)); - exit((err == ENOMEM || err == EMFILE - || err == ENFILE) ? EX_OSERR : (err == EROFS - || err == + warn(_("cannot open lock file %s"), argv[optind]); + exit((errno == ENOMEM || errno == EMFILE + || errno == ENFILE) ? EX_OSERR : (errno == EROFS + || errno == ENOSPC) ? EX_CANTCREAT : EX_NOINPUT); } @@ -226,16 +219,11 @@ int main(int argc, char *argv[]) /* Use provided file descriptor */ fd = (int)strtol(argv[optind], &eon, 10); if (*eon || !argv[optind]) { - fprintf(stderr, _("%s: bad number: %s\n"), program, - argv[optind]); - exit(EX_USAGE); + errx(EX_USAGE, _("bad number: %s"), argv[optind]); } } else { /* Bad options */ - fprintf(stderr, - _("%s: requires file descriptor, file or directory\n"), - program); - exit(EX_USAGE); + errx(EX_USAGE, _("requires file descriptor, file or directory")); } if (have_timeout) { @@ -257,7 +245,7 @@ int main(int argc, char *argv[]) } while (flock(fd, type | block)) { - switch ((err = errno)) { + switch (errno) { case EWOULDBLOCK: /* -n option set and failed to lock */ exit(1); @@ -271,13 +259,11 @@ int main(int argc, char *argv[]) default: /* Other errors */ if (filename) - fprintf(stderr, "%s: %s: %s\n", program, - filename, strerror(err)); + warn("%s", filename); else - fprintf(stderr, "%s: %d: %s\n", program, fd, - strerror(err)); - exit((err == ENOLCK - || err == ENOMEM) ? EX_OSERR : EX_DATAERR); + warn("%d", fd); + exit((errno == ENOLCK + || errno == ENOMEM) ? EX_OSERR : EX_DATAERR); } } @@ -297,19 +283,14 @@ int main(int argc, char *argv[]) f = fork(); if (f < 0) { - err = errno; - fprintf(stderr, _("%s: fork failed: %s\n"), program, - strerror(err)); - exit(EX_OSERR); + err(EX_OSERR, _("fork failed")); } else if (f == 0) { if (do_close) close(fd); execvp(cmd_argv[0], cmd_argv); - err = errno; /* execvp() failed */ - fprintf(stderr, "%s: %s: %s\n", program, cmd_argv[0], - strerror(err)); - _exit((err == ENOMEM) ? EX_OSERR : EX_UNAVAILABLE); + warn("%s", cmd_argv[0]); + _exit((errno == ENOMEM) ? EX_OSERR : EX_UNAVAILABLE); } else { do { w = waitpid(f, &status, 0); @@ -318,10 +299,8 @@ int main(int argc, char *argv[]) } while (w != f); if (w == -1) { - err = errno; status = EXIT_FAILURE; - fprintf(stderr, "%s: waitpid failed: %s\n", - program, strerror(err)); + warn(_("waitpid failed")); } else if (WIFEXITED(status)) status = WEXITSTATUS(status); else if (WIFSIGNALED(status)) -- cgit v1.2.3-55-g7522