Annotation of 43BSDReno/usr.bin/window/wwspawn.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 1983 Regents of the University of California.
                      3:  * All rights reserved.
                      4:  *
                      5:  * This code is derived from software contributed to Berkeley by
                      6:  * Edward Wang at The University of California, Berkeley.
                      7:  *
                      8:  * Redistribution and use in source and binary forms are permitted provided
                      9:  * that: (1) source distributions retain this entire copyright notice and
                     10:  * comment, and (2) distributions including binaries display the following
                     11:  * acknowledgement:  ``This product includes software developed by the
                     12:  * University of California, Berkeley and its contributors'' in the
                     13:  * documentation or other materials provided with the distribution and in
                     14:  * all advertising materials mentioning features or use of this software.
                     15:  * Neither the name of the University nor the names of its contributors may
                     16:  * be used to endorse or promote products derived from this software without
                     17:  * specific prior written permission.
                     18:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
                     19:  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
                     20:  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     21:  */
                     22: 
                     23: #ifndef lint
                     24: static char sccsid[] = "@(#)wwspawn.c  3.15 (Berkeley) 6/6/90";
                     25: #endif /* not lint */
                     26: 
                     27: #include "ww.h"
                     28: #include <sys/signal.h>
                     29: 
                     30: /*
                     31:  * There is a dead lock with vfork and closing of pseudo-ports.
                     32:  * So we have to be sneaky about error reporting.
                     33:  */
                     34: wwspawn(wp, file, argv)
                     35: register struct ww *wp;
                     36: char *file;
                     37: char **argv;
                     38: {
                     39:        int pid;
                     40:        int ret;
                     41:        char erred = 0;
                     42:        int s;
                     43: 
                     44:        s = sigblock(sigmask(SIGCHLD));
                     45:        switch (pid = vfork()) {
                     46:        case -1:
                     47:                wwerrno = WWE_SYS;
                     48:                ret = -1;
                     49:                break;
                     50:        case 0:
                     51:                if (wwenviron(wp) >= 0)
                     52:                        execvp(file, argv);
                     53:                erred = 1;
                     54:                _exit(1);
                     55:        default:
                     56:                if (erred) {
                     57:                        wwerrno = WWE_SYS;
                     58:                        ret = -1;
                     59:                } else {
                     60:                        wp->ww_pid = pid;
                     61:                        wp->ww_state = WWS_HASPROC;
                     62:                        ret = pid;
                     63:                }
                     64:        }
                     65:        (void) sigsetmask(s);
                     66:        if (wp->ww_socket >= 0) {
                     67:                (void) close(wp->ww_socket);
                     68:                wp->ww_socket = -1;
                     69:        }
                     70:        return ret;
                     71: }

unix.superglobalmegacorp.com

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