summaryrefslogtreecommitdiffstats
path: root/src/p_lcom.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/p_lcom.c')
-rw-r--r--src/p_lcom.c167
1 files changed, 0 insertions, 167 deletions
diff --git a/src/p_lcom.c b/src/p_lcom.c
deleted file mode 100644
index a8c42ce..0000000
--- a/src/p_lcom.c
+++ /dev/null
@@ -1,167 +0,0 @@
-/* ************************************************************************** */
-/* */
-/* ::: :::::::: */
-/* p_lcom.c :+: :+: :+: */
-/* +:+ +:+ +:+ */
-/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
-/* +#+#+#+#+#+ +#+ */
-/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
-/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
-/* */
-/* ************************************************************************** */
-
-#include <libft.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include "d_define.h"
-#include "f_fail.h"
-#include "p_split.h"
-#include "s_line.h"
-#include "s_lpipes.h"
-#include "s_struct.h"
-
-static void
- rdr_err_check(char *ptr,
- t_com **com)
-{
- if ((*com)->redir == -1 && ft_ischarset("><", *(ptr + 1)) == TRUE)
- {
- /* TODO: syntax err */
- }
- else if ((*com)->redir == 1 && ft_ischarset("<", *(ptr + 1)) == TRUE)
- {
- /* TODO: syntax err */
- }
- else if ((*com)->redir == 2 && ft_ischarset("<>", *(ptr + 1)) == TRUE)
- {
- /* TODO: syntax err */
- }
-}
-
-static int8_t
- get_rdrpath(char *ptr,
- t_com **com)
-{
- char *p_rdrpath;
-
- ptr += ((*com)->redir == 2) ? (2) : (1);
- if (!((*com)->rdrpath =
- (char*)malloc((ft_strlen(ptr) + 1) * sizeof(char))))
- {
- return (-1);
- }
- p_rdrpath = (*com)->rdrpath;
- while (*ptr)
- {
- if (*ptr != ' ')
- {
- *p_rdrpath = *ptr;
- p_rdrpath++;
- }
- ptr++;
- }
- *p_rdrpath = '\0';
- return (0);
-}
-
-static void
- get_rdrfd(const char *ptr,
- t_com **com)
-{
- while (ft_isdigit(*ptr) == TRUE)
- {
- ptr--;
- }
- if (*ptr != ' ')
- (*com)->rdrfd = STDOUT_FILENO;
- else
- {
- ptr += 1;
- (*com)->rdrfd = ft_atoi(ptr);
- }
-}
-
-int8_t
- p_get_redir(const char word[],
- t_com **com)
-{
- /* TODO: norme */
- char *ptr;
-
- ptr = (char *)word;
- while (*ptr)
- {
- if (*ptr == '<')
- {
- (*com)->redir = -1;
- break ;
- }
- if (*ptr == '>')
- {
- (*com)->redir = (*(ptr + 1) == '>') ? (2) : (1);
- break ;
- }
- ptr++;
- /* TODO: handle correctly multiples "msh ~> echo qwe > qwe > asd >> zxc > qweasdzxc" */
- /* hint: bash only handles the last one */
- /* TODO: handle "msh ~> cat < Makefile >qwe" | gl hf */
- }
- if ((*com)->redir > 0)
- {
- if (ft_isdigit(*(ptr - 1)) == TRUE)
- get_rdrfd(ptr - 1, com);
- else
- (*com)->rdrfd = STDOUT_FILENO;
- rdr_err_check(ptr, com);
- if (get_rdrpath(ptr, com) != 0)
- return (-1);
- }
- return (0);
-}
-
-int8_t
- p_lcom(const char line[],
- t_msh *msh)
-{
- /* TODO: norme */
- uint64_t i;
- t_line *link;
- char **words;
- char *ptr;
- uint8_t nextif;
- t_bool next;
-
- i = 0;
- if ((words = p_split_line(line)) == NULL)
- return (-1);
- while (words[i] != NULL)
- {
- if (words[i][ft_strlen(words[i]) - 1] == ';')
- nextif = 0;
- else if (words[i][ft_strlen(words[i]) - 1] == '&')
- nextif = 1;
- else
- nextif = 2;
- words[i][ft_strlen(words[i]) - 1] = '\0';
- next = FALSE;
- if ((ptr = ft_strchr(words[i], '|')) != NULL)
- {
- if ((link = s_line_new(NULL, msh)) == NULL)
- return (-1);
- if ((s_split_pipes(words[i], link, msh)) == NULL)
- return (-1);
- next = TRUE;
- }
- if (next == FALSE && (link = s_line_new(words[i], msh)) == NULL)
- return (-1);
- link->nextif = nextif;
- s_line_add_back(&msh->curr, link);
- i++;
- }
- ft_delwords(words);
- return (0);
-}