Advertisement
Guest User

handle_redirection.c

a guest
Feb 24th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.67 KB | None | 0 0
  1. #include "../../includes/minishell.h"
  2.  
  3. int handle_right_arrow(t_redirect *begin)
  4. {
  5.     t_redirect  *current;
  6.     int         fd;
  7.  
  8.     while (begin)
  9.     {
  10.         if (begin->type == DOUBLE_AQUOTE || begin->type == SIMPLE_AQUOTE)
  11.         {
  12.             current = begin;
  13.             fd = open(current->file, O_CREAT, 0644);
  14.             close(fd);
  15.         }
  16.         begin = begin->next;
  17.     }
  18.     fd = redirect_output(current);
  19.     return (fd);
  20. }
  21.  
  22. int     is_right_arrow(t_redirect *beggin)
  23. {
  24.     while (beggin)
  25.     {
  26.         if (beggin->type == SIMPLE_AQUOTE || beggin->type == DOUBLE_AQUOTE)
  27.             return (1);
  28.         else if (beggin->type == LEFT_AQUOTE)
  29.             return (0);
  30.         beggin = beggin->next;
  31.     }
  32.     return (0);
  33. }
  34.  
  35. int     is_left_arrow(t_redirect *beggin)
  36. {
  37.     while (beggin)
  38.     {
  39.         if (beggin->type == LEFT_AQUOTE)
  40.             return (1);
  41.         beggin = beggin->next;
  42.     }
  43.     return (0);
  44. }
  45.  
  46. t_redirect      *got_right_after_left_arrow(t_redirect *save)
  47. {
  48.     t_redirect *to_redirect;
  49.  
  50.     to_redirect = NULL;
  51.     while (save)
  52.     {
  53.         if (save->type == SIMPLE_AQUOTE || save->type == DOUBLE_AQUOTE)
  54.             to_redirect = save;
  55.         save = save->next;
  56.     }
  57.     if (to_redirect == NULL)
  58.         return (NULL);
  59.     else
  60.         return (to_redirect);
  61. }
  62.  
  63. int handle_left_arrow(t_data *data, t_redirect *begin, int is_pipeline)
  64. {
  65.     int fd;
  66.     int save;
  67.     t_redirect *current;
  68.     t_redirect *first_link;
  69.  
  70.     first_link = begin;
  71.     while (begin)
  72.     {
  73.         if (begin->type == LEFT_AQUOTE)
  74.             current = begin;
  75.         begin = begin->next;
  76.     }
  77.     if ((fd = open(current->file, O_RDONLY)) == -1)
  78.         return (EXIT_FAILURE);
  79.     save = dup(STDIN_FILENO);
  80.     if (dup2(fd, STDIN_FILENO) < 0)
  81.         return (EXIT_FAILURE);
  82.     close (fd);
  83.     dup2(STDIN_FILENO, save);
  84.     close(save);
  85.     if (got_right_after_left_arrow(first_link))
  86.         handle_right_arrow(first_link);
  87.     else if (is_pipeline == 1)
  88.         redirect(data->pipe[1], 1);
  89.     return (EXIT_SUCCESS);
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement