1*f3e7f55eSRobert Mustacchi /*
2*f3e7f55eSRobert Mustacchi * This file and its contents are supplied under the terms of the
3*f3e7f55eSRobert Mustacchi * Common Development and Distribution License ("CDDL"), version 1.0.
4*f3e7f55eSRobert Mustacchi * You may only use this file in accordance with the terms of version
5*f3e7f55eSRobert Mustacchi * 1.0 of the CDDL.
6*f3e7f55eSRobert Mustacchi *
7*f3e7f55eSRobert Mustacchi * A full copy of the text of the CDDL should have accompanied this
8*f3e7f55eSRobert Mustacchi * source. A copy of the CDDL is also available via the Internet at
9*f3e7f55eSRobert Mustacchi * http://www.illumos.org/license/CDDL.
10*f3e7f55eSRobert Mustacchi */
11*f3e7f55eSRobert Mustacchi
12*f3e7f55eSRobert Mustacchi /*
13*f3e7f55eSRobert Mustacchi * Copyright (c) 2015, Joyent, Inc.
14*f3e7f55eSRobert Mustacchi */
15*f3e7f55eSRobert Mustacchi
16*f3e7f55eSRobert Mustacchi /*
17*f3e7f55eSRobert Mustacchi * Alternate execution engine for CTF tools
18*f3e7f55eSRobert Mustacchi */
19*f3e7f55eSRobert Mustacchi
20*f3e7f55eSRobert Mustacchi #include <stdlib.h>
21*f3e7f55eSRobert Mustacchi #include <string.h>
22*f3e7f55eSRobert Mustacchi #include <unistd.h>
23*f3e7f55eSRobert Mustacchi
24*f3e7f55eSRobert Mustacchi #include "ctftools.h"
25*f3e7f55eSRobert Mustacchi
26*f3e7f55eSRobert Mustacchi void
ctf_altexec(const char * env,int argc,char ** argv)27*f3e7f55eSRobert Mustacchi ctf_altexec(const char *env, int argc, char **argv)
28*f3e7f55eSRobert Mustacchi {
29*f3e7f55eSRobert Mustacchi const char *alt;
30*f3e7f55eSRobert Mustacchi char *altexec;
31*f3e7f55eSRobert Mustacchi
32*f3e7f55eSRobert Mustacchi alt = getenv(env);
33*f3e7f55eSRobert Mustacchi if (alt == NULL || *alt == '\0')
34*f3e7f55eSRobert Mustacchi return;
35*f3e7f55eSRobert Mustacchi
36*f3e7f55eSRobert Mustacchi altexec = strdup(alt);
37*f3e7f55eSRobert Mustacchi if (altexec == NULL)
38*f3e7f55eSRobert Mustacchi terminate("failed to allocate memory for altexec\n");
39*f3e7f55eSRobert Mustacchi
40*f3e7f55eSRobert Mustacchi if (unsetenv(env) != 0)
41*f3e7f55eSRobert Mustacchi aborterr("failed to remove %s from environment", env);
42*f3e7f55eSRobert Mustacchi
43*f3e7f55eSRobert Mustacchi (void) execv(altexec, argv);
44*f3e7f55eSRobert Mustacchi terminate("failed to altexec %s", altexec);
45*f3e7f55eSRobert Mustacchi }
46