maxishell
Implementation of a shell for Linux-like systems
Loading...
Searching...
No Matches
redirect_append.c File Reference
#include "tokens.h"
#include "shell.h"
#include "redirection.h"
#include "execute.h"
#include "pipe.h"
#include <sys/wait.h>
Include dependency graph for redirect_append.c:

Go to the source code of this file.

Functions

static int open_and_redirect (t_ast *node, t_ms_data *data)
 
int redirect_append (t_ast *node, t_ms_data *data)
 

Function Documentation

◆ open_and_redirect()

static int open_and_redirect ( t_ast node,
t_ms_data data 
)
static

Definition at line 20 of file redirect_append.c.

21{
22 int fd;
23
24 if (data->std_out == -1)
25 {
26 data->std_out = open_file(node->right, ">>");
27 if (data->std_out == -1)
28 return (EXIT_FAILURE);
29 }
30 else
31 {
32 fd = open_file(node->right, ">>");
33 if (fd == -1)
34 return (EXIT_FAILURE);
35 dup2(fd, STDOUT_FILENO);
36 close(fd);
37 }
38 return (EXIT_SUCCESS);
39}
#define EXIT_SUCCESS
Definition exit_status.h:16
#define EXIT_FAILURE
Definition exit_status.h:17
int open_file(t_ast *node, char *direction)
open file in the context of redirection
Definition utils.c:34
struct s_ast * right
Definition tokens.h:54
int std_out
Definition shell.h:27

References EXIT_FAILURE, EXIT_SUCCESS, open_file(), s_ast::right, and s_ms_data::std_out.

Referenced by redirect_append().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ redirect_append()

int redirect_append ( t_ast node,
t_ms_data data 
)

Definition at line 41 of file redirect_append.c.

42{
43 pid_t pid;
44 int exec_status;
45 int status;
46
47 pid = fork();
48 if (pid == -1)
49 return (EXIT_FAILURE);
50 if (pid == 0)
51 {
52 if (open_and_redirect(node, data) != 0)
53 exit(EXIT_FAILURE);
54 exec_status = execute_ast(node->left, data);
55 exit(exec_status);
56 }
57 if (waitpid(pid, &status, 0) == -1)
58 return (EXIT_FAILURE);
59 if (WIFSIGNALED(status))
60 return (128 + WTERMSIG(status));
61 return (WEXITSTATUS(status));
62}
int execute_ast(t_ast *node, t_ms_data *data)
execute Abstract Syntax Tree
Definition execute.c:38
static int open_and_redirect(t_ast *node, t_ms_data *data)
struct s_ast * left
Definition tokens.h:53

References execute_ast(), EXIT_FAILURE, s_ast::left, and open_and_redirect().

Referenced by execute_ast().

Here is the call graph for this function:
Here is the caller graph for this function: