Annotation of 43BSD/ucb/window/wwspawn.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char sccsid[] = "@(#)wwspawn.c  3.11 4/24/85";
        !             3: #endif
        !             4: 
        !             5: /*
        !             6:  * Copyright (c) 1983 Regents of the University of California,
        !             7:  * All rights reserved.  Redistribution permitted subject to
        !             8:  * the terms of the Berkeley Software License Agreement.
        !             9:  */
        !            10: 
        !            11: #include "ww.h"
        !            12: #include <sys/signal.h>
        !            13: 
        !            14: /*
        !            15:  * There is a dead lock with vfork and closing of pseudo-ports.
        !            16:  * So we have to be sneaky about error reporting.
        !            17:  */
        !            18: wwspawn(wp, file, argv)
        !            19: register struct ww *wp;
        !            20: char *file;
        !            21: char **argv;
        !            22: {
        !            23:        int pid;
        !            24:        int ret;
        !            25:        char erred = 0;
        !            26:        int s;
        !            27: 
        !            28:        s = sigblock(sigmask(SIGCHLD));
        !            29:        switch (pid = vfork()) {
        !            30:        case -1:
        !            31:                wwerrno = WWE_SYS;
        !            32:                ret = -1;
        !            33:                break;
        !            34:        case 0:
        !            35:                if (wwenviron(wp) >= 0)
        !            36:                        execvp(file, argv);
        !            37:                erred = 1;
        !            38:                _exit(1);
        !            39:        default:
        !            40:                if (erred) {
        !            41:                        wwerrno = WWE_SYS;
        !            42:                        ret = -1;
        !            43:                } else {
        !            44:                        wp->ww_pid = pid;
        !            45:                        wp->ww_state = WWS_HASPROC;
        !            46:                        ret = pid;
        !            47:                }
        !            48:        }
        !            49:        (void) sigsetmask(s);
        !            50:        if (wp->ww_socket >= 0) {
        !            51:                (void) close(wp->ww_socket);
        !            52:                wp->ww_socket = -1;
        !            53:        }
        !            54:        return ret;
        !            55: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.