/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* interpreter.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: dkaiser #include #include #include #include int eval_rec(t_node *node, t_env *env); int eval(t_node *node, t_env *env) { pid_t pid; int result; result = 0; pid = fork(); if (pid < 0) { return (EXIT_FAILURE); } if (pid == 0) { result = eval_rec(node, env); exit(result); } else { waitpid(pid, &result, 0); } return (result); } int eval_rec(t_node *node, t_env *env) { pid_t pid; int result; if (node->type == PIPE_NODE) { pid = fork(); if (pid < 0) { return (EXIT_FAILURE); } if (pid == 0) { result = execute_cmd(&node->content.pipe.left->content.cmd, env); exit(result); } else { result = eval(node->content.pipe.right, env); } } else if (node->type == CMD_NODE) { result = execute_cmd(&node->content.cmd, env); } else { panic(UNREACHABLE); return (EXIT_FAILURE); } return (result); }