/***************************************************************************** Application ASH: execute.c (c) Pierre Adriaans 1994 ------------------------------------------------------------------------------ Fonction d'execution de commandes. *****************************************************************************/ #include "ash.h" extern AnswerBoxItem_t *InfoMsg; extern char *Shell; /***************************************************************************** ExecuteCommande() ------------------------------------------------------------------------------ Fonction d'execution bete et mechante. Son seul interet par rapport a un system() est le reglage des signaux de facon independante pour le pere et le fils. Le traitement d'une commande 'cd' doit se faire avant l'appel. *****************************************************************************/ int ExecuteCommande(char *Cmd) { int pid,stat,i; #ifdef SIGACT struct sigaction New,Old; #endif /* Creer un ss-process */ switch(pid=fork()) { case -1: InitAnswerBoxItem(&InfoMsg); AddAnswerBoxItem(&InfoMsg,"ERROR: impossible to fork a child process"); InfoBox(ErrorNorm,ErrorInv," Command execution ",InfoMsg,0,0,DOUBLE_FRAMED); return(-1); break; case 0: /* ResetTerminal */ RestoreKeyboard(); ResetScreen(); /* Pour le process fils, remettre les signaux a DFL */ #ifdef SIGACT New.sa_handler = SIG_DFL; sigemptyset(&New.sa_mask); New.sa_flags = 0; for(i=0;i