/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/06/22 17:14:49 by dkaiser #+# #+# */
-/* Updated: 2025/01/18 19:30:43 by chuhlig ### ########.fr */
+/* Updated: 2025/01/20 14:39:38 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
t_env **env, int in_fd);
int open_file(char *path, int flags, int mode);
int eval_rec(t_node *node, t_env **env, int in_fd);
-void create_files(t_list *files);
+int create_files(t_list *files);
#endif
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/08/02 13:49:31 by dkaiser #+# #+# */
-/* Updated: 2025/01/20 13:17:59 by dkaiser ### ########.fr */
+/* Updated: 2025/01/20 17:12:42 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
return (free_tokens(*tokens), NULL);
set_redir(&result[0], 0, NULL, env);
set_redir(&result[1], 0, NULL, env);
- while (cur != NULL && cur->next != NULL)
+ while (cur != NULL)
{
if (cur->type == REDIR_TOKEN && cur->next->type == STRING_TOKEN)
collect_and_check_redir(result, &cur, env, create_files);
return ;
}
else if ((*cur)->content.redir_type == INPUT_FILE)
- set_redir(&result[0], INPUT_FILE, format_string(str, env), env);
+ ft_lstadd_back(create_files, ft_lstnew(set_redir(&result[0], INPUT_FILE, format_string(str, env, 0), env)));
else if ((*cur)->content.redir_type == OUTPUT_OVERRIDE)
ft_lstadd_back(create_files, ft_lstnew(set_redir(&result[1],
- OUTPUT_OVERRIDE, format_string(str, env), env)));
+ OUTPUT_OVERRIDE, format_string(str, env, 0), env)));
else if ((*cur)->content.redir_type == OUTPUT_APPEND)
ft_lstadd_back(create_files, ft_lstnew(set_redir(&result[1],
- OUTPUT_APPEND, format_string(str, env), env)));
+ OUTPUT_APPEND, format_string(str, env, 0), env)));
next_token = (*cur)->next;
// free_token_and_connect(*cur);
if (next_token)
{
+ free_token_and_connect(*cur);
*cur = next_token->next;
free_token_and_connect(next_token);
}
redir->specifier = format_string(spec, env, ft_atoi("0"));
else
redir->specifier = spec;
- if (redir->type == OUTPUT_APPEND || redir->type == OUTPUT_OVERRIDE)
+ if (redir->type != INPUT_LIMITER)
{
result = malloc(sizeof(t_redirection));
if (!result)
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/16 16:23:51 by dkaiser #+# #+# */
-/* Updated: 2025/01/19 14:36:59 by chuhlig ### ########.fr */
+/* Updated: 2025/01/20 15:54:00 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
#include "minishell.h"
#include <unistd.h>
-void create_files(t_list *files)
+int create_files(t_list *files)
{
t_redirection *file;
int fd;
while (files)
{
- dbg("Test");
if (files->content == NULL)
+ {
+ files = files->next;
continue ;
+ }
file = (t_redirection *)files->content;
+ if (file->type == INPUT_FILE && (access(file->specifier, F_OK) == -1 || access(file->specifier, R_OK) == -1))
+ return (EXIT_FAILURE);
if (access(file->specifier, F_OK) != -1 && access(file->specifier, W_OK) == -1)
break ;
if (file->type == OUTPUT_OVERRIDE)
break ;
files = files->next;
}
+ return (EXIT_SUCCESS);
}
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/12/17 19:21:35 by chuhlig #+# #+# */
-/* Updated: 2025/01/19 19:15:46 by chuhlig ### ########.fr */
+/* Updated: 2025/01/20 15:54:43 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
original_std[1] = dup(STDOUT_FILENO);
original_std[0] = dup(STDIN_FILENO);
- create_files(cmd->create_files);
- if (handle_redirections(cmd->redirs) == -1)
+ result = create_files(cmd->create_files);
+ if (result != EXIT_SUCCESS || handle_redirections(cmd->redirs) == -1)
{
establish_pipeline(original_std[0], original_std[1]);
return (EXIT_FAILURE);
establish_pipeline(original_std[0], original_std[1]);
return (result);
}
+ if (result != EXIT_SUCCESS)
+ return (result);
return (exec_cmd(cmd, env, original_std, EXIT_SUCCESS));
}
/* By: chuhlig <chuhlig@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2025/01/18 18:34:51 by chuhlig #+# #+# */
-/* Updated: 2025/01/18 18:47:31 by chuhlig ### ########.fr */
+/* Updated: 2025/01/20 15:24:49 by dkaiser ### ########.fr */
/* */
/* ************************************************************************** */
}
else if (redir->type == INPUT_LIMITER)
{
- fd = open_file("/tmp/heredoc_tmp", O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ fd = open_file("/tmp/heredoc_tmp", O_WRONLY | O_TRUNC, 0644);
if (fd < 0)
return (-1);
write(fd, redir->specifier, ft_strlen(redir->specifier));
if (redir->type == OUTPUT_OVERRIDE)
{
- fd = open_file(redir->specifier, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ fd = open_file(redir->specifier, O_WRONLY | O_TRUNC, 0644);
if (fd < 0)
return (-1);
dup2(fd, STDOUT_FILENO);
}
else if (redir->type == OUTPUT_APPEND)
{
- fd = open_file(redir->specifier, O_WRONLY | O_CREAT | O_APPEND, 0644);
+ fd = open_file(redir->specifier, O_WRONLY | O_APPEND, 0644);
if (fd < 0)
return (-1);
dup2(fd, STDOUT_FILENO);