1/*
2 * Copyright (c) 2008 Todd C. Miller <Todd.Miller@courtesan.com>
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
16 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
17 */
18
19#include <config.h>
20
21#include <sys/types.h>
22#include <err.h>
23#include <errno.h>
24#include <limits.h>
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28#include <unistd.h>
29
30#include "missing.h"
31
32int
33main (int argc, char **argv)
34{
35    char *cp, *cmnd;
36
37    if (argc < 2)
38	errx(EXIT_FAILURE, "requires at least one argument");
39
40    /* Shift argv and make a copy of the command to execute. */
41    argv++;
42    argc--;
43    cmnd = strdup(argv[0]);
44    if (cmnd == NULL)
45	err(EXIT_FAILURE, NULL);
46
47    /* If invoked as a login shell, modify argv[0] accordingly. */
48    if (argv[0][0] == '-') {
49	if ((cp = strrchr(argv[0], '/')) == NULL)
50	    cp = argv[0];
51	*cp = '-';
52    }
53    execv(cmnd, argv);
54    warn("unable to execute %s", argv[0]);
55    _exit(EXIT_FAILURE);
56}
57