/******************************************************************************
* This file is Copyright 1993 by Philip G. Richards.  All Rights Reserved.
* See the file README that came with this distribution for permissions on
* code usage, copying, and distribution.  It comes with absolutely no warranty.
* email: <pgr@prg.ox.ac.uk>
******************************************************************************/

/* ---INFOBEGIN--- *  DO NOT DELETE THIS COMMENT BLOCK!!!
COMMAND shell none "run a subcommand"
 *  ---INFOEND---  */

#include "client.h"
#include "table.h"
#include <sys/wait.h>

int
lshell_main(int argc, char *const*argv, char **envp)
{
    int cpid, status = 0;
    RETSIGTYPE (*old_int)(int);
    RETSIGTYPE (*old_quit)(int);

    old_int  = signal(SIGINT,  SIG_IGN);
    old_quit = signal(SIGQUIT, SIG_IGN);

    if (argc < 2)
	return 0;

    cpid = vfork();
    if (cpid < 0)
    {
	perror("shell command couldn't start");
	return 1;
    }
    else if (cpid == 0)
    {
	(void)signal(SIGINT,  SIG_DFL);
	(void)signal(SIGQUIT, SIG_DFL);
	if (execvp(argv[1], argv + 1) < 0)
	{
	    perror("shell command failed");
	    _exit(1);
	}
    }
    else
    {
	if (wait(&status) < 0)
	{
	    perror("waiting for shell command to finish");
	    return 1;
	}
	status >>= 8;
    }
    (void)signal(SIGINT,  old_int);
    (void)signal(SIGQUIT, old_quit);

    return status;
}


syntax highlighted by Code2HTML, v. 0.9.1