aboutsummaryrefslogtreecommitdiffstats
path: root/ports/common/guts/execvp.c
blob: acc9fdc3cabec7efabfb39761d5b102c3d9b78d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/* 
 * Copyright (c) 2008-2010 Wind River Systems; see
 * guts/COPYRIGHT for information.
 *
 * SPDX-License-Identifier: LGPL-2.1-only
 *
 * static int
 * wrap_execvp(const char *file, char *const *argv) {
 *	int rc = -1;
 */

	/* note:  we don't canonicalize this, because we are intentionally
	 * NOT redirecting execs into the chroot environment.  If you try
	 * to execute /bin/sh, you get the actual /bin/sh, not
	 * <CHROOT>/bin/sh.  This allows use of basic utilities.  This
	 * design will likely be revisited.
	 */
        if (antimagic == 0) {
		const char *path_guess = pseudo_exec_path(file, 1);
                pseudo_client_op(OP_EXEC, PSA_EXEC, -1, -1, path_guess, 0);
        }

	pseudo_setupenv();
	if (pseudo_has_unload(NULL))
		pseudo_dropenv();

	/* if exec() fails, we may end up taking signals unexpectedly...
	 * not much we can do about that.
	 */
	sigprocmask(SIG_SETMASK, &pseudo_saved_sigmask, NULL);
	rc = real_execvp(file, argv);

/*	return rc;
 * }
 */