/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* check.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cchauvet fd_in[0] = ft_heredoc(data, redirection); if (cmd->fd_in[0] == -2) return (1); } return (0); } static bool ft_check_infile(t_data *data, t_cmd *cmd, char *redirection_identifier, char *redirection) { if (ft_strcmp(redirection_identifier, "<") == 0) { if (ft_file_is_readable(data, redirection)) cmd->fd_in[0] = open(redirection, O_RDONLY); else { cmd->fd_in[0] = -2; return (1); } } return (0); } static bool ft_check_outfile(t_data *data, t_cmd *cmd, char *redirection_identifier, char *redirection) { if (ft_strcmp(redirection_identifier, ">") == 0) { if (ft_file_is_writable(data, redirection)) cmd->fd_out[0] = open(redirection, O_WRONLY | O_TRUNC | O_CREAT, 0644); else { cmd->fd_out[0] = -2; return (1); } } return (0); } static bool ft_check_outfile_append(t_data *data, t_cmd *cmd, char *redirection_identifier, char *redirection) { if (ft_strcmp(redirection_identifier, ">>") == 0) { if (ft_file_is_writable(data, redirection)) cmd->fd_out[0] = open(redirection, O_WRONLY | O_APPEND | O_CREAT, 0644); else { cmd->fd_out[0] = -2; return (1); } } return (0); } bool ft_check_redirection(t_data *data, t_cmd *cmd, char *redirection_identifier, char *redirection) { char *str; bool return_code; if (ft_is_in("<>", redirection[0])) { ft_eprintf("minishell: %s: invalid redirection file\n", redirection); return (1); } str = ft_strdup(redirection); if (str == NULL) { ft_eprintf("minishell: malloc failed\n"); return (1); } ft_quote_remover(str); return_code = (ft_check_heredoc(data, cmd, redirection_identifier, str) || ft_check_infile(data, cmd, redirection_identifier, str) || ft_check_outfile(data, cmd, redirection_identifier, str) || ft_check_outfile_append(data, cmd, redirection_identifier, str)); free(str); return (return_code); }