void my_cmd(t_list *list, char *s, char **env, int i) { char *epur_s; char **tab; epur_s = epur_str(s); tab = my_str_to_wordtab(epur_s, &i); if ((my_builtin(list, s, tab, env)) == 0 && \ check_redir(epur_s, tab, env, i) == 0) my_fork(tab[0], tab, env); if (check_env(tab, env) == 1) env = env_cpy(list); check_recurs(list, s, env, i - 1); my_mini_free(epur_s, tab); }
void child_process(char *s, char **tab, char **env) { int i; my_builtin(s, env); my_alias(s, tab, env); my_execution(tab, env); if (s[0] != 'c' || s[1] != 'd') { i = -1; while (env[++i]) free(env[i]); i = -1; while (tab[++i]) free(tab[i]); my_spec_error(s); } free(tab); free(env); exit(EXIT_SUCCESS); }
static int my_pipe_piped(t_datas *datas, t_cmd *cmd, int fdin, int *pfd) { int res; res = 0; if (cmd->prev != NULL) { if (dup2(fdin, 0) < 0) exit(my_error(FTSH_NAME, "pipe error", "input")); } if (cmd->next != NULL) { if (dup2(pfd[1], 1) < 0) exit(my_error(FTSH_NAME, "pipe error", "output")); close(pfd[0]); } if ((res = my_builtin(datas, &(cmd->args))) != 42) return (res); if (cmd->exe == NULL) exit(my_error(cmd->args[0], "command not found.", NULL)); if ((res = execve(cmd->exe, cmd->args, datas->env)) < 0) exit(my_error(FTSH_NAME, "execution failed", cmd->str)); return (res); }