#ifndef EXECUTE_CMD_H
#define EXECUTE_CMD_H
struct simple_command_struct;
struct compound_command_struct;
struct command_struct;
struct pipeline_struct;
struct and_or_list_struct;
struct list_struct;
struct redirect_list_struct {
struct redirect_struct *first;
struct redirect_list_struct *next;
};
struct redirect_list_list_struct {
struct redirect_list_struct *first;
struct redirect_list_struct *last;
};
struct exec_env_desc_struct {
int line_number;
char *command;
unsigned subshell : 1;
union {
struct {
unsigned no_fork : 1;
unsigned builtin : 1;
};
struct {
struct running_pipeline_struct *running_pipeline;
int pipe_in_fd;
int fd_to_close;
int pipe_out_fd;
};
};
struct redirect_list_list_struct redirect_list_list;
};
void redirect_list_list_init(struct redirect_list_list_struct *redirect_list_list);
void redirect_list_list_append(struct redirect_list_list_struct *redirect_list_list, struct redirect_list_struct *redirect_list);
void execute_command(const struct command_struct *command, struct exec_env_desc_struct *exec_env_desc);
void execute_pipeline(const struct pipeline_struct *pipeline, int asynchronous, struct exec_env_desc_struct *exec_env_desc);
void execute_and_or_list(const struct and_or_list_struct *and_or_list, struct exec_env_desc_struct *exec_env_desc);
void execute_list(const struct list_struct *list, struct exec_env_desc_struct *exec_env_desc);
#endif