xref: /titanic_50/usr/src/tools/ctf/cvt/altexec.c (revision f3e7f55e73a39377d55a030f124cc86b3b66a9cc)
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