File:  [ELWIX - Embedded LightWeight unIX -] / tftpd / src / exec.c
Revision 1.1.2.4: download - view: text, annotated - select for diffs - revision graph
Mon Feb 17 10:12:26 2014 UTC (10 years, 4 months ago) by misho
Branches: tftp0_2
add execute task

#include "global.h"
#include "exec.h"


void *
execProg(sched_task_t *task)
{
	pid_t pid, res;
	const char *str;
	char port[STRSIZ] = { [0 ... STRSIZ - 1] = 0 }, 
	     opc[STRSIZ] = { [0 ... STRSIZ - 1] = 0 };
	ait_val_t v = AIT_VAL_INITIALIZER(v);
	int stat;

	ETRACE();

	str = cfg_getAttribute(&cfg, "exec_on", TASK_ARG(task));
	if (!str)
		taskExit(task, NULL);

	switch (pid = vfork()) {
		case -1:
			ESYSERR(0);
			break;
		case 0:
			snprintf(opc, STRSIZ, "%hu", (u_short) TASK_DATLEN(task));
			snprintf(port, STRSIZ, "%hu", (u_short) e_n2port(&cli.addr));
			execl(_PATH_BSHELL, _PATH_BSHELL, "-c", str, TASK_ARG(task), opc, 
					cli.file, cli.mode, e_n2addr(&cli.addr, &v), port, NULL);
			AIT_FREE_VAL(&v);
			_exit(127);
			break;
		default:
			EVERBOSE(1, "Execute %s", str);
			do {
				res = waitpid(pid, &stat, 0);
			} while (res == -1 && errno == EINTR);
			break;
	}

	taskExit(task, NULL);
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>