Annotation of tftpd/src/exec.c, revision 1.2

1.2     ! misho       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, *addr;
        !            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:                        addr = e_n2addr(&cli.addr, &v);
        !            29:                        EVERBOSE(1, "Execute %s %s %s %s %s %s %s", str, TASK_ARG(task), opc, 
        !            30:                                        cli.file, cli.mode, addr, port);
        !            31:                        execl(_PATH_BSHELL, _PATH_BSHELL, str, TASK_ARG(task), opc, 
        !            32:                                        cli.file, cli.mode, addr, port, NULL);
        !            33:                        AIT_FREE_VAL(&v);
        !            34:                        _exit(127);
        !            35:                        break;
        !            36:                default:
        !            37:                        EVERBOSE(2, "Wait to finish executed program %s", str);
        !            38:                        do {
        !            39:                                res = waitpid(pid, &stat, 0);
        !            40:                        } while (res == -1 && errno == EINTR);
        !            41:                        break;
        !            42:        }
        !            43: 
        !            44:        taskExit(task, NULL);
        !            45: }

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