lint patches from Anon-Ymous

This commit is contained in:
christos 2008-03-08 03:35:53 +00:00
parent 3af75740f5
commit a8a21bf00e
2 changed files with 45 additions and 35 deletions

View File

@ -1,7 +1,7 @@
# $NetBSD: Makefile,v 1.4 2005/01/12 14:35:56 xtraeme Exp $
# $NetBSD: Makefile,v 1.5 2008/03/08 03:35:53 christos Exp $
# @(#)Makefile 8.1 (Berkeley) 6/6/93
PROG= apply
WARNS= 3
WARNS= 4
.include <bsd.prog.mk>

View File

@ -1,4 +1,4 @@
/* $NetBSD: apply.c,v 1.16 2005/05/08 19:53:57 matt Exp $ */
/* $NetBSD: apply.c,v 1.17 2008/03/08 03:35:53 christos Exp $ */
/*-
* Copyright (c) 1994
@ -37,7 +37,7 @@
#if 0
static char sccsid[] = "@(#)apply.c 8.4 (Berkeley) 4/4/94";
#else
__RCSID("$NetBSD: apply.c,v 1.16 2005/05/08 19:53:57 matt Exp $");
__RCSID("$NetBSD: apply.c,v 1.17 2008/03/08 03:35:53 christos Exp $");
#endif
#endif /* not lint */
@ -52,23 +52,26 @@ __RCSID("$NetBSD: apply.c,v 1.16 2005/05/08 19:53:57 matt Exp $");
#include <string.h>
#include <unistd.h>
void usage(void);
int shell_system(const char *);
static void usage(void) __dead;
static int shell_system(const char *);
int
main(int argc, char *argv[])
{
int ch, clen, debug, i, l, magic, n, nargs, rval;
size_t clen, l;
int ch, debug, i, magic, n, nargs, rval;
char *c, *cmd, *p, *q, *nc;
(void)setprogname(argv[0]); /* for portability */
debug = 0;
magic = '%'; /* Default magic char is `%'. */
nargs = -1;
while ((ch = getopt(argc, argv, "a:d0123456789")) != -1)
while ((ch = getopt(argc, argv, "a:d0123456789")) != -1) {
switch (ch) {
case 'a':
if (optarg[1] != '\0')
errx(1,
errx(EXIT_FAILURE,
"illegal magic character specification.");
magic = optarg[0];
break;
@ -78,13 +81,14 @@ main(int argc, char *argv[])
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
if (nargs != -1)
errx(1,
errx(EXIT_FAILURE,
"only one -# argument may be specified.");
nargs = optopt - '0';
break;
default:
usage();
}
}
argc -= optind;
argv += optind;
@ -96,14 +100,14 @@ main(int argc, char *argv[])
* Look for %digit references in the command, remembering the
* largest one.
*/
for (n = 0, p = argv[0]; *p != '\0'; ++p)
for (n = 0, p = argv[0]; *p != '\0'; ++p) {
if (p[0] == magic && isdigit((unsigned char)p[1]) &&
p[1] != '0') {
++p;
if (p[0] - '0' > n)
n = p[0] - '0';
}
}
/*
* If there were any %digit references, then use those, otherwise
* build a new command string with sufficient %digit references at
@ -112,8 +116,8 @@ main(int argc, char *argv[])
*/
if ((cmd = malloc(sizeof("exec ") - 1 +
strlen(argv[0]) + 9 * (sizeof(" %1") - 1) + 1)) == NULL)
err(1, "malloc");
err(EXIT_FAILURE, "malloc");
if (n == 0) {
/* If nargs not set, default to a single argument. */
if (nargs == -1)
@ -141,7 +145,7 @@ main(int argc, char *argv[])
* for the normal case.
*/
if ((c = malloc(clen = 1024)) == NULL)
err(1, "malloc");
err(EXIT_FAILURE, "malloc");
/*
* (argc) and (argv) are still offset by one to make it simpler to
@ -158,18 +162,19 @@ main(int argc, char *argv[])
if (l > clen) {
nc = realloc(c, l);
if (nc == NULL)
err(1, "malloc");
err(EXIT_FAILURE, "malloc");
c = nc;
clen = l;
}
/* Expand command argv references. */
for (p = cmd, q = c; *p != '\0'; ++p)
for (p = cmd, q = c; *p != '\0'; ++p) {
if (p[0] == magic && isdigit((unsigned char)p[1]) &&
p[1] != '0')
q += sprintf(q, "%s", argv[(++p)[0] - '0']);
else
*q++ = *p;
}
/* Terminate the command string. */
*q = '\0';
@ -177,15 +182,15 @@ main(int argc, char *argv[])
/* Run the command. */
if (debug)
(void)printf("%s\n", c);
else
if (shell_system(c))
rval = 1;
else if (shell_system(c))
rval = 1;
}
if (argc != 1)
errx(1, "expecting additional argument%s after \"%s\"",
errx(EXIT_FAILURE,
"expecting additional argument%s after \"%s\"",
(nargs - argc) ? "s" : "", argv[argc - 1]);
exit(rval);
return rval;
}
/*
@ -193,13 +198,13 @@ main(int argc, char *argv[])
* Private version of system(3). Use the user's SHELL environment
* variable as the shell to execute.
*/
int
static int
shell_system(const char *command)
{
static const char *name, *shell;
int status;
pid_t pid;
int omask;
pid_t pid;
sig_t intsave, quitsave;
if (shell == NULL) {
@ -214,25 +219,30 @@ shell_system(const char *command)
return(1);
omask = sigblock(sigmask(SIGCHLD));
switch(pid = vfork()) {
switch (pid = vfork()) {
case -1: /* error */
err(1, "vfork");
err(EXIT_FAILURE, "vfork");
/*NOTREACHED*/
case 0: /* child */
(void)sigsetmask(omask);
execl(shell, name, "-c", command, NULL);
(void)execl(shell, name, "-c", command, NULL);
warn("%s", shell);
_exit(1);
/*NOTREACHED*/
default: /* parent */
intsave = signal(SIGINT, SIG_IGN);
quitsave = signal(SIGQUIT, SIG_IGN);
pid = waitpid(pid, &status, 0);
(void)sigsetmask(omask);
(void)signal(SIGINT, intsave);
(void)signal(SIGQUIT, quitsave);
return pid == -1 ? -1 : status;
}
intsave = signal(SIGINT, SIG_IGN);
quitsave = signal(SIGQUIT, SIG_IGN);
pid = waitpid(pid, &status, 0);
(void)sigsetmask(omask);
(void)signal(SIGINT, intsave);
(void)signal(SIGQUIT, quitsave);
return(pid == -1 ? -1 : status);
/*NOTREACHED*/
}
void
__dead
static void
usage(void)
{