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

    1: #include "global.h"
    2: #include "exec.h"
    3: 
    4: 
    5: void *
    6: execProg(sched_task_t *task)
    7: {
    8: 	pid_t pid, res;
    9: 	const char *str;
   10: 	char port[STRSIZ] = { [0 ... STRSIZ - 1] = 0 }, 
   11: 	     opc[STRSIZ] = { [0 ... STRSIZ - 1] = 0 };
   12: 	ait_val_t v = AIT_VAL_INITIALIZER(v);
   13: 	int stat;
   14: 
   15: 	ETRACE();
   16: 
   17: 	str = cfg_getAttribute(&cfg, "exec_on", TASK_ARG(task));
   18: 	if (!str)
   19: 		taskExit(task, NULL);
   20: 
   21: 	switch (pid = vfork()) {
   22: 		case -1:
   23: 			ESYSERR(0);
   24: 			break;
   25: 		case 0:
   26: 			snprintf(opc, STRSIZ, "%hu", (u_short) TASK_DATLEN(task));
   27: 			snprintf(port, STRSIZ, "%hu", (u_short) e_n2port(&cli.addr));
   28: 			execl(_PATH_BSHELL, _PATH_BSHELL, "-c", str, TASK_ARG(task), opc, 
   29: 					cli.file, cli.mode, e_n2addr(&cli.addr, &v), port, NULL);
   30: 			AIT_FREE_VAL(&v);
   31: 			_exit(127);
   32: 			break;
   33: 		default:
   34: 			EVERBOSE(1, "Execute %s", str);
   35: 			do {
   36: 				res = waitpid(pid, &stat, 0);
   37: 			} while (res == -1 && errno == EINTR);
   38: 			break;
   39: 	}
   40: 
   41: 	taskExit(task, NULL);
   42: }

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