static void check_cmd2(char **str, t_env *e) { int stat; pid_t fat; char *ret; ret = NULL; if (str[0] && ft_strcmp(str[0], "cd") == 0) ft_cd(str[1], e); else if (str[0] && ft_strcmp(str[0], "env") == 0) print_env(e->env); else if (str[0] && ft_strcmp(str[0], "exit") == 0) ft_exit(str); else if (str[0] && (ret = pathsys(str[0], e)) != NULL) { fat = fork(); if (fat != -1) { if (fat == 0) execve(ret, str, e->env); else waitpid(fat, &stat, 0); } if (WIFSIGNALED(stat)) ft_wrong_exit(e->shell, WTERMSIG(stat), ret); } safe_free(ret); }
void ft_exec_bin(t_env *shell) { int stat_loc; if (ft_set_binpath(shell) == 0) { tcsetattr(0, TCSANOW, sing_oldterm(NULL)); shell->cpid = fork(); if (shell->cpid != -1) { if (shell->cpid == 0) execve(shell->binpath, shell->av, shell->env); else waitpid(shell->cpid, &stat_loc, 0); } if (WIFSIGNALED(stat_loc)) ft_wrong_exit(shell->name_shell, WTERMSIG(stat_loc), shell->binpath); free(shell->binpath); shell->cpid = 0; tcsetattr(0, 0, sing_newterm(NULL)); } }