From 977238f69eaa0e47932549e3f6b2be45a5301eb3 Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 12 Jan 2017 15:05:59 +0100 Subject: [PATCH 01/15] premier commit. working. . . --- 42sh/Makefile | 183 ++++++++++++++++++ 42sh/includes/glob.h | 44 +++++ 42sh/includes/minishell.h | 8 + 42sh/libft | 2 +- 42sh/srcs/builtin/builtin.c | 51 +++++ 42sh/{src => srcs}/builtin/builtin_cd.c | 0 42sh/{src => srcs}/builtin/builtin_echo.c | 0 42sh/{src => srcs}/builtin/builtin_env.c | 0 42sh/{src => srcs}/builtin/builtin_exit.c | 0 42sh/{src => srcs}/builtin/builtin_setenv.c | 0 42sh/{src => srcs}/builtin/builtin_unsetenv.c | 0 42sh/{src => srcs}/exec/ast_free.c | 0 42sh/{src => srcs}/exec/exec_and_if.c | 0 42sh/{src => srcs}/exec/exec_command.c | 0 42sh/{src => srcs}/exec/exec_dgreat.c | 0 42sh/{src => srcs}/exec/exec_great.c | 0 42sh/{src => srcs}/exec/exec_less.c | 0 42sh/{src => srcs}/exec/exec_or_if.c | 0 42sh/{src => srcs}/exec/exec_pipe.c | 0 42sh/{src => srcs}/exec/exec_semi.c | 0 42sh/srcs/exec/fd_redirect.c | 27 +++ 42sh/srcs/exec/ft_cmd.c | 65 +++++++ 42sh/{src => srcs}/exec/ft_exec.c | 0 42sh/{src => srcs}/exec/ft_findexec.c | 0 42sh/{src => srcs}/exec/set_exitstatus.c | 0 42sh/srcs/glob/glob.c | 133 +++++++++++++ 42sh/srcs/glob/glob_print.c | 48 +++++ 42sh/srcs/glob/ld/ft_ld_back.c | 21 ++ 42sh/srcs/glob/ld/ft_ld_clear.c | 24 +++ 42sh/srcs/glob/ld/ft_ld_del.c | 36 ++++ 42sh/srcs/glob/ld/ft_ld_front.c | 21 ++ 42sh/srcs/glob/ld/ft_ld_new.c | 26 +++ 42sh/srcs/glob/ld/ft_ld_pushback.c | 30 +++ 42sh/srcs/glob/ld/ft_ld_pushfront.c | 31 +++ 42sh/srcs/glob/ld/ft_ld_reverse.c | 32 +++ 42sh/srcs/glob/ld/ft_ld_size.c | 27 +++ 42sh/srcs/glob/ld/ft_ld_swap.c | 35 ++++ 42sh/srcs/glob/ld/ft_ld_to_tab.c | 34 ++++ 42sh/{src => srcs}/lexer/ft_tokenize.c | 0 42sh/{src => srcs}/lexer/lexer_backslash.c | 0 42sh/{src => srcs}/lexer/lexer_default.c | 0 42sh/{src => srcs}/lexer/lexer_delim.c | 0 42sh/{src => srcs}/lexer/lexer_dquote.c | 0 42sh/{src => srcs}/lexer/lexer_great.c | 0 42sh/{src => srcs}/lexer/lexer_greatand.c | 0 42sh/{src => srcs}/lexer/lexer_less.c | 0 42sh/{src => srcs}/lexer/lexer_lessand.c | 0 42sh/{src => srcs}/lexer/lexer_number.c | 0 42sh/{src => srcs}/lexer/lexer_quote.c | 0 42sh/{src => srcs}/lexer/lexer_sep.c | 0 42sh/{src => srcs}/lexer/lexer_word.c | 0 42sh/{src => srcs}/lexer/token_append.c | 0 42sh/{src => srcs}/lexer/token_cmp_type.c | 0 42sh/{src => srcs}/lexer/token_free.c | 0 42sh/{src => srcs}/lexer/token_init.c | 0 42sh/{src => srcs}/lexer/token_print.c | 0 42sh/{src => srcs}/line-editing/curs_ask.c | 0 42sh/{src => srcs}/line-editing/curs_clear.c | 0 42sh/{src => srcs}/line-editing/curs_goto.c | 0 42sh/{src => srcs}/line-editing/curs_move.c | 0 42sh/{src => srcs}/line-editing/curs_setup.c | 0 42sh/{src => srcs}/line-editing/curs_single.c | 0 .../line-editing/curs_term_setup.c | 0 42sh/{src => srcs}/line-editing/curs_write.c | 0 42sh/srcs/line-editing/ft_interactive_sh.c | 26 +++ 42sh/{src => srcs}/line-editing/ft_readline.c | 0 42sh/{src => srcs}/line-editing/rl_bitset.c | 0 .../line-editing/rl_clear_function.c | 0 .../line-editing/rl_clipboard_function.c | 0 .../line-editing/rl_clipboard_utility.c | 0 .../line-editing/rl_comp_function.c | 0 .../line-editing/rl_default_function.c | 0 42sh/{src => srcs}/line-editing/rl_display.c | 0 .../line-editing/rl_dynamic_buffer.c | 0 .../line-editing/rl_long_move_function.c | 0 .../line-editing/rl_merge_line.c | 0 .../line-editing/rl_page_move_function.c | 0 42sh/{src => srcs}/line-editing/rl_prompt.c | 0 .../line-editing/rl_quoting_function.c | 0 .../line-editing/rl_remove_function.c | 0 42sh/{src => srcs}/line-editing/rl_setup.c | 0 .../line-editing/rl_short_move_function.c | 0 .../line-editing/rl_stack_line.c | 0 .../line-editing/rl_state_function.c | 0 .../line-editing/rl_word_move_function.c | 0 .../line-editing/rl_word_utility.c | 0 42sh/{src => srcs}/main/data_exit.c | 0 42sh/{src => srcs}/main/data_init.c | 0 42sh/srcs/main/ft_cleanup.c | 31 +++ 42sh/{src => srcs}/main/ft_putast.c | 0 42sh/{src => srcs}/main/ft_putast2.c | 0 42sh/srcs/main/lib_expansion.c | 28 +++ 42sh/{src => srcs}/main/main.c | 18 ++ 42sh/srcs/main/sig_handler.c | 27 +++ 42sh/{src => srcs}/parser/ft_parse.c | 0 42sh/{src => srcs}/parser/parse_dgreat.c | 0 42sh/{src => srcs}/parser/parse_dless.c | 0 42sh/{src => srcs}/parser/parse_great.c | 0 42sh/{src => srcs}/parser/parse_greatand.c | 0 42sh/{src => srcs}/parser/parse_less.c | 0 42sh/{src => srcs}/parser/parse_lessand.c | 0 42sh/{src => srcs}/parser/parse_separator.c | 0 42sh/{src => srcs}/parser/parse_word.c | 0 103 files changed, 1007 insertions(+), 1 deletion(-) create mode 100644 42sh/includes/glob.h create mode 100644 42sh/srcs/builtin/builtin.c rename 42sh/{src => srcs}/builtin/builtin_cd.c (100%) rename 42sh/{src => srcs}/builtin/builtin_echo.c (100%) rename 42sh/{src => srcs}/builtin/builtin_env.c (100%) rename 42sh/{src => srcs}/builtin/builtin_exit.c (100%) rename 42sh/{src => srcs}/builtin/builtin_setenv.c (100%) rename 42sh/{src => srcs}/builtin/builtin_unsetenv.c (100%) rename 42sh/{src => srcs}/exec/ast_free.c (100%) rename 42sh/{src => srcs}/exec/exec_and_if.c (100%) rename 42sh/{src => srcs}/exec/exec_command.c (100%) rename 42sh/{src => srcs}/exec/exec_dgreat.c (100%) rename 42sh/{src => srcs}/exec/exec_great.c (100%) rename 42sh/{src => srcs}/exec/exec_less.c (100%) rename 42sh/{src => srcs}/exec/exec_or_if.c (100%) rename 42sh/{src => srcs}/exec/exec_pipe.c (100%) rename 42sh/{src => srcs}/exec/exec_semi.c (100%) create mode 100644 42sh/srcs/exec/fd_redirect.c create mode 100644 42sh/srcs/exec/ft_cmd.c rename 42sh/{src => srcs}/exec/ft_exec.c (100%) rename 42sh/{src => srcs}/exec/ft_findexec.c (100%) rename 42sh/{src => srcs}/exec/set_exitstatus.c (100%) create mode 100644 42sh/srcs/glob/glob.c create mode 100644 42sh/srcs/glob/glob_print.c create mode 100644 42sh/srcs/glob/ld/ft_ld_back.c create mode 100644 42sh/srcs/glob/ld/ft_ld_clear.c create mode 100644 42sh/srcs/glob/ld/ft_ld_del.c create mode 100644 42sh/srcs/glob/ld/ft_ld_front.c create mode 100644 42sh/srcs/glob/ld/ft_ld_new.c create mode 100644 42sh/srcs/glob/ld/ft_ld_pushback.c create mode 100644 42sh/srcs/glob/ld/ft_ld_pushfront.c create mode 100644 42sh/srcs/glob/ld/ft_ld_reverse.c create mode 100644 42sh/srcs/glob/ld/ft_ld_size.c create mode 100644 42sh/srcs/glob/ld/ft_ld_swap.c create mode 100644 42sh/srcs/glob/ld/ft_ld_to_tab.c rename 42sh/{src => srcs}/lexer/ft_tokenize.c (100%) rename 42sh/{src => srcs}/lexer/lexer_backslash.c (100%) rename 42sh/{src => srcs}/lexer/lexer_default.c (100%) rename 42sh/{src => srcs}/lexer/lexer_delim.c (100%) rename 42sh/{src => srcs}/lexer/lexer_dquote.c (100%) rename 42sh/{src => srcs}/lexer/lexer_great.c (100%) rename 42sh/{src => srcs}/lexer/lexer_greatand.c (100%) rename 42sh/{src => srcs}/lexer/lexer_less.c (100%) rename 42sh/{src => srcs}/lexer/lexer_lessand.c (100%) rename 42sh/{src => srcs}/lexer/lexer_number.c (100%) rename 42sh/{src => srcs}/lexer/lexer_quote.c (100%) rename 42sh/{src => srcs}/lexer/lexer_sep.c (100%) rename 42sh/{src => srcs}/lexer/lexer_word.c (100%) rename 42sh/{src => srcs}/lexer/token_append.c (100%) rename 42sh/{src => srcs}/lexer/token_cmp_type.c (100%) rename 42sh/{src => srcs}/lexer/token_free.c (100%) rename 42sh/{src => srcs}/lexer/token_init.c (100%) rename 42sh/{src => srcs}/lexer/token_print.c (100%) rename 42sh/{src => srcs}/line-editing/curs_ask.c (100%) rename 42sh/{src => srcs}/line-editing/curs_clear.c (100%) rename 42sh/{src => srcs}/line-editing/curs_goto.c (100%) rename 42sh/{src => srcs}/line-editing/curs_move.c (100%) rename 42sh/{src => srcs}/line-editing/curs_setup.c (100%) rename 42sh/{src => srcs}/line-editing/curs_single.c (100%) rename 42sh/{src => srcs}/line-editing/curs_term_setup.c (100%) rename 42sh/{src => srcs}/line-editing/curs_write.c (100%) create mode 100644 42sh/srcs/line-editing/ft_interactive_sh.c rename 42sh/{src => srcs}/line-editing/ft_readline.c (100%) rename 42sh/{src => srcs}/line-editing/rl_bitset.c (100%) rename 42sh/{src => srcs}/line-editing/rl_clear_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_clipboard_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_clipboard_utility.c (100%) rename 42sh/{src => srcs}/line-editing/rl_comp_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_default_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_display.c (100%) rename 42sh/{src => srcs}/line-editing/rl_dynamic_buffer.c (100%) rename 42sh/{src => srcs}/line-editing/rl_long_move_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_merge_line.c (100%) rename 42sh/{src => srcs}/line-editing/rl_page_move_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_prompt.c (100%) rename 42sh/{src => srcs}/line-editing/rl_quoting_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_remove_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_setup.c (100%) rename 42sh/{src => srcs}/line-editing/rl_short_move_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_stack_line.c (100%) rename 42sh/{src => srcs}/line-editing/rl_state_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_word_move_function.c (100%) rename 42sh/{src => srcs}/line-editing/rl_word_utility.c (100%) rename 42sh/{src => srcs}/main/data_exit.c (100%) rename 42sh/{src => srcs}/main/data_init.c (100%) create mode 100644 42sh/srcs/main/ft_cleanup.c rename 42sh/{src => srcs}/main/ft_putast.c (100%) rename 42sh/{src => srcs}/main/ft_putast2.c (100%) create mode 100644 42sh/srcs/main/lib_expansion.c rename 42sh/{src => srcs}/main/main.c (78%) create mode 100644 42sh/srcs/main/sig_handler.c rename 42sh/{src => srcs}/parser/ft_parse.c (100%) rename 42sh/{src => srcs}/parser/parse_dgreat.c (100%) rename 42sh/{src => srcs}/parser/parse_dless.c (100%) rename 42sh/{src => srcs}/parser/parse_great.c (100%) rename 42sh/{src => srcs}/parser/parse_greatand.c (100%) rename 42sh/{src => srcs}/parser/parse_less.c (100%) rename 42sh/{src => srcs}/parser/parse_lessand.c (100%) rename 42sh/{src => srcs}/parser/parse_separator.c (100%) rename 42sh/{src => srcs}/parser/parse_word.c (100%) diff --git a/42sh/Makefile b/42sh/Makefile index 8dcf5189..022c2fe2 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -1,3 +1,4 @@ +<<<<<<< HEAD NAME = minishell CC = gcc TAGFILE = .tags @@ -88,3 +89,185 @@ fclean: clean @$(MAKE) fclean -C libft/ 2>/dev/null re: fclean all +======= +#* ************************************************************************** *# +#* *# +#* ::: :::::::: *# +#* Makefile :+: :+: :+: *# +#* +:+ +:+ +:+ *# +#* By: wescande +#+ +:+ +#+ *# +#* +#+#+#+#+#+ +#+ *# +#* Created: 2016/08/29 21:32:58 by wescande #+# #+# *# +#* Updated: 2016/09/27 20:14:55 by wescande ### ########.fr *# +#* *# +#* ************************************************************************** *# + +NAME = 42sh + +CC = gcc +FLAGS = -Wall -Wextra -Werror +D_FLAGS = -g + +LEN_NAME = `printf "%s" $(NAME) |wc -c` +DELTA = $$(echo "$$(tput cols)-24-$(LEN_NAME)"|bc) + +LIBFT_DIR = libft/ +LIBFT_LIB = $(LIBFT_DIR)libft.a +LIBFT_INC = $(LIBFT_DIR)includes/ + +LIBS = -ltermcap + +SRC_DIR = srcs/ +INC_DIR = includes/ +OBJ_DIR = objs/ + +SRC_BASE = \ +builtin/builtin.c\ +builtin/builtin_cd.c\ +builtin/builtin_echo.c\ +builtin/builtin_env.c\ +builtin/builtin_exit.c\ +builtin/builtin_setenv.c\ +builtin/builtin_unsetenv.c\ +exec/ast_free.c\ +exec/exec_and_if.c\ +exec/exec_command.c\ +exec/exec_dgreat.c\ +exec/exec_great.c\ +exec/exec_less.c\ +exec/exec_or_if.c\ +exec/exec_pipe.c\ +exec/exec_semi.c\ +exec/fd_redirect.c\ +exec/ft_cmd.c\ +exec/ft_exec.c\ +exec/ft_findexec.c\ +exec/set_exitstatus.c\ +glob/glob.c\ +glob/glob_print.c\ +glob/ld/ft_ld_back.c\ +glob/ld/ft_ld_clear.c\ +glob/ld/ft_ld_del.c\ +glob/ld/ft_ld_front.c\ +glob/ld/ft_ld_new.c\ +glob/ld/ft_ld_pushback.c\ +glob/ld/ft_ld_pushfront.c\ +glob/ld/ft_ld_reverse.c\ +glob/ld/ft_ld_size.c\ +glob/ld/ft_ld_swap.c\ +glob/ld/ft_ld_to_tab.c\ +lexer/ft_tokenize.c\ +lexer/lexer_backslash.c\ +lexer/lexer_default.c\ +lexer/lexer_delim.c\ +lexer/lexer_dquote.c\ +lexer/lexer_great.c\ +lexer/lexer_greatand.c\ +lexer/lexer_less.c\ +lexer/lexer_lessand.c\ +lexer/lexer_number.c\ +lexer/lexer_quote.c\ +lexer/lexer_sep.c\ +lexer/lexer_word.c\ +lexer/token_append.c\ +lexer/token_cmp_type.c\ +lexer/token_free.c\ +lexer/token_init.c\ +lexer/token_print.c\ +line-editing/curs_ask.c\ +line-editing/curs_clear.c\ +line-editing/curs_goto.c\ +line-editing/curs_move.c\ +line-editing/curs_setup.c\ +line-editing/curs_single.c\ +line-editing/curs_term_setup.c\ +line-editing/curs_write.c\ +line-editing/ft_interactive_sh.c\ +line-editing/ft_readline.c\ +line-editing/rl_bitset.c\ +line-editing/rl_clear_function.c\ +line-editing/rl_clipboard_function.c\ +line-editing/rl_clipboard_utility.c\ +line-editing/rl_comp_function.c\ +line-editing/rl_default_function.c\ +line-editing/rl_display.c\ +line-editing/rl_dynamic_buffer.c\ +line-editing/rl_long_move_function.c\ +line-editing/rl_merge_line.c\ +line-editing/rl_page_move_function.c\ +line-editing/rl_prompt.c\ +line-editing/rl_quoting_function.c\ +line-editing/rl_remove_function.c\ +line-editing/rl_setup.c\ +line-editing/rl_short_move_function.c\ +line-editing/rl_stack_line.c\ +line-editing/rl_state_function.c\ +line-editing/rl_word_move_function.c\ +line-editing/rl_word_utility.c\ +main/data_exit.c\ +main/data_init.c\ +main/ft_cleanup.c\ +main/ft_putast.c\ +main/ft_putast2.c\ +main/lib_expansion.c\ +main/main.c\ +main/sig_handler.c\ +parser/ft_parse.c\ +parser/parse_dgreat.c\ +parser/parse_dless.c\ +parser/parse_great.c\ +parser/parse_greatand.c\ +parser/parse_less.c\ +parser/parse_lessand.c\ +parser/parse_separator.c\ +parser/parse_word.c + +SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) +OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) + +all : $(NAME) + +$(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) + @$(CC) $(FLAGS) $(D_FLAGS) \ + -I $(INC_DIR) \ + -I $(LIBFT_INC) \ + $(LIBS) \ + $(LIBFT_LIB) $(OBJS) \ + -o $(NAME) + @echo "\r\033[48;5;15;38;5;25m✅ MAKE $(NAME)\033[0m\033[K" + +$(LIBFT_LIB): + @make -j -C $(LIBFT_DIR) + +$(OBJ_DIR) : + @mkdir -p $(OBJ_DIR) + @mkdir -p $(dir $(OBJS)) + +$(OBJ_DIR)%.o : $(SRC_DIR)%.c | $(OBJ_DIR) + @$(CC) $(FLAGS) -MMD -c $< -o $@\ + -I $(INC_DIR)\ + -I $(LIBFT_INC) + @printf "\r\033[38;5;11m⌛ MAKE %s plz wait : %*s\033[0m\033[K" $(NAME) $(DELTA) "$@" + +clean: cleanlib + @rm -rf $(OBJ_DIR) + @echo "\r\033[38;5;202m✖ clean $(NAME).\033[0m\033[K" + +cleanlib: + @make -C $(LIBFT_DIR) clean + +fclean: clean fcleanlib + @rm -f $(NAME) + @echo "\r\033[38;5;196m❌ fclean $(NAME).\033[0m\033[K" + +fcleanlib: cleanlib + @make -C $(LIBFT_DIR) fclean + +re: fclean all + +relib: fcleanlib $(LIBFT_LIB) + +.PHONY : fclean clean re relib cleanlib fcleanlib + +-include $(OBJS:.o=.d) +>>>>>>> premier commit. working. . . diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h new file mode 100644 index 00000000..4df7b651 --- /dev/null +++ b/42sh/includes/glob.h @@ -0,0 +1,44 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* glob.h :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ +/* Updated: 2017/01/05 16:20:32 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef GLOB_H +# define GLOB_H + +# include "minishell.h" + +typedef struct s_ld +{ + void *content; + struct s_ld *next; + struct s_ld *prev; +} t_ld; + +char **glob(const char *str, char **env); +void glob_print(t_list *token, t_data *data); + +/* +** LIST D: +*/ +void ft_ld_new(t_ld **alst, void *content); +t_ld *ft_ld_front(t_ld *ld); +void ft_ld_pushfront(t_ld **alst, void *content); +void ft_ld_pushback(t_ld **alst, void *content); +size_t ft_ld_size(t_ld *ld); +void ft_ld_del(t_ld **ld, void (*del)()); +void ft_ld_clear(t_ld **ld, void (*del)()); +void ft_ld_reverse(t_ld **lst); +t_ld *ft_ld_back(t_ld *ld); +t_ld *ft_ld_swap(t_ld *l_cur); +char **ft_ld_to_tab(t_ld *ld); + + +#endif diff --git a/42sh/includes/minishell.h b/42sh/includes/minishell.h index 02b05202..108ea05b 100644 --- a/42sh/includes/minishell.h +++ b/42sh/includes/minishell.h @@ -6,7 +6,11 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */ +<<<<<<< HEAD /* Updated: 2017/01/11 17:17:16 by jhalford ### ########.fr */ +======= +/* Updated: 2017/01/05 14:24:14 by wescande ### ########.fr */ +>>>>>>> premier commit. working. . . /* */ /* ************************************************************************** */ @@ -21,8 +25,12 @@ # include "parser.h" # include "ft_readline.h" # include "exec.h" +<<<<<<< HEAD # include "builtin.h" # include "job_control.h" +======= +# include "glob.h" +>>>>>>> premier commit. working. . . # include # include diff --git a/42sh/libft b/42sh/libft index ab92f0e5..4c497745 160000 --- a/42sh/libft +++ b/42sh/libft @@ -1 +1 @@ -Subproject commit ab92f0e5d817c9d726a8ccf2f11c084ba446bbdf +Subproject commit 4c4977452745481166749b813e8db51dcf0caf44 diff --git a/42sh/srcs/builtin/builtin.c b/42sh/srcs/builtin/builtin.c new file mode 100644 index 00000000..1966a63e --- /dev/null +++ b/42sh/srcs/builtin/builtin.c @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* builtin.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/28 14:21:34 by jhalford #+# #+# */ +/* Updated: 2016/12/03 15:17:21 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +t_stof g_builtin[] = { + {"echo", &builtin_echo}, + {"cd", &builtin_cd}, + {"setenv", &builtin_setenv}, + {"unsetenv", &builtin_unsetenv}, + {"env", &builtin_env}, + {"exit", &builtin_exit}, + {NULL, NULL}, +}; + +int ft_builtin(char **av, t_data *data) +{ + int i; + int ret; + + i = -1; + while (g_builtin[++i].name) + if (ft_strcmp(g_builtin[i].name, *av) == 0) + { + if (data->exec.fdout != STDOUT) + { + if (fork() == 0) + { + fd_redirect(data); + ret = (g_builtin[i].f)(av, data); + exit(ret); + } + } + else + { + ret = (g_builtin[i].f)(av, data); + set_exitstatus(data, ret); + } + return (1); + } + return (0); +} diff --git a/42sh/src/builtin/builtin_cd.c b/42sh/srcs/builtin/builtin_cd.c similarity index 100% rename from 42sh/src/builtin/builtin_cd.c rename to 42sh/srcs/builtin/builtin_cd.c diff --git a/42sh/src/builtin/builtin_echo.c b/42sh/srcs/builtin/builtin_echo.c similarity index 100% rename from 42sh/src/builtin/builtin_echo.c rename to 42sh/srcs/builtin/builtin_echo.c diff --git a/42sh/src/builtin/builtin_env.c b/42sh/srcs/builtin/builtin_env.c similarity index 100% rename from 42sh/src/builtin/builtin_env.c rename to 42sh/srcs/builtin/builtin_env.c diff --git a/42sh/src/builtin/builtin_exit.c b/42sh/srcs/builtin/builtin_exit.c similarity index 100% rename from 42sh/src/builtin/builtin_exit.c rename to 42sh/srcs/builtin/builtin_exit.c diff --git a/42sh/src/builtin/builtin_setenv.c b/42sh/srcs/builtin/builtin_setenv.c similarity index 100% rename from 42sh/src/builtin/builtin_setenv.c rename to 42sh/srcs/builtin/builtin_setenv.c diff --git a/42sh/src/builtin/builtin_unsetenv.c b/42sh/srcs/builtin/builtin_unsetenv.c similarity index 100% rename from 42sh/src/builtin/builtin_unsetenv.c rename to 42sh/srcs/builtin/builtin_unsetenv.c diff --git a/42sh/src/exec/ast_free.c b/42sh/srcs/exec/ast_free.c similarity index 100% rename from 42sh/src/exec/ast_free.c rename to 42sh/srcs/exec/ast_free.c diff --git a/42sh/src/exec/exec_and_if.c b/42sh/srcs/exec/exec_and_if.c similarity index 100% rename from 42sh/src/exec/exec_and_if.c rename to 42sh/srcs/exec/exec_and_if.c diff --git a/42sh/src/exec/exec_command.c b/42sh/srcs/exec/exec_command.c similarity index 100% rename from 42sh/src/exec/exec_command.c rename to 42sh/srcs/exec/exec_command.c diff --git a/42sh/src/exec/exec_dgreat.c b/42sh/srcs/exec/exec_dgreat.c similarity index 100% rename from 42sh/src/exec/exec_dgreat.c rename to 42sh/srcs/exec/exec_dgreat.c diff --git a/42sh/src/exec/exec_great.c b/42sh/srcs/exec/exec_great.c similarity index 100% rename from 42sh/src/exec/exec_great.c rename to 42sh/srcs/exec/exec_great.c diff --git a/42sh/src/exec/exec_less.c b/42sh/srcs/exec/exec_less.c similarity index 100% rename from 42sh/src/exec/exec_less.c rename to 42sh/srcs/exec/exec_less.c diff --git a/42sh/src/exec/exec_or_if.c b/42sh/srcs/exec/exec_or_if.c similarity index 100% rename from 42sh/src/exec/exec_or_if.c rename to 42sh/srcs/exec/exec_or_if.c diff --git a/42sh/src/exec/exec_pipe.c b/42sh/srcs/exec/exec_pipe.c similarity index 100% rename from 42sh/src/exec/exec_pipe.c rename to 42sh/srcs/exec/exec_pipe.c diff --git a/42sh/src/exec/exec_semi.c b/42sh/srcs/exec/exec_semi.c similarity index 100% rename from 42sh/src/exec/exec_semi.c rename to 42sh/srcs/exec/exec_semi.c diff --git a/42sh/srcs/exec/fd_redirect.c b/42sh/srcs/exec/fd_redirect.c new file mode 100644 index 00000000..6c1d8c47 --- /dev/null +++ b/42sh/srcs/exec/fd_redirect.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_redirect.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */ +/* Updated: 2016/12/03 15:24:08 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void fd_redirect(t_data *data) +{ + if (data->exec.fdin != STDIN) + { + dup2(data->exec.fdin, STDIN); + close(data->exec.fdin); + } + if (data->exec.fdout != STDOUT) + { + dup2(data->exec.fdout, STDOUT); + close(data->exec.fdout); + } +} diff --git a/42sh/srcs/exec/ft_cmd.c b/42sh/srcs/exec/ft_cmd.c new file mode 100644 index 00000000..adb9d6db --- /dev/null +++ b/42sh/srcs/exec/ft_cmd.c @@ -0,0 +1,65 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_cmd.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/27 21:13:18 by jhalford #+# #+# */ +/* Updated: 2016/12/09 21:50:26 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +extern pid_t g_pid; + +int ft_cmd_process(char **argv, t_data *data) +{ + char *execpath; + + ft_expand_dollar(argv, data->env); + if (ft_builtin(argv, data)) + return (0); + else if (ft_strchr(argv[0], '/')) + execpath = argv[0]; + else if (!(execpath = ft_findexec(ft_getenv(data->env, "PATH"), argv[0]))) + { + ft_dprintf(2, "%s: command not found: %s\n", SHELL_NAME, argv[0]); + set_exitstatus(data, 127); + return (-1); + } + return (ft_cmd_exec(execpath, argv, data)); +} + +int ft_cmd_exec(char *execpath, char **argv, t_data *data) +{ + pid_t pid; + int status; + + if (access(execpath, X_OK) == -1) + { + ft_dprintf(2, "%s: permission denied: %s\n", SHELL_NAME, argv[0]); + ft_strdel(&execpath); + return (-1); + } + if ((pid = fork()) == -1) + return (-1); + else if (pid == 0) + { + fd_redirect(data); + execve(execpath, argv, data->env); + } + else + { + ft_strdel(&execpath); + g_pid = pid; + if (data->exec.fdout == STDOUT) + { + waitpid(pid, &status, 0); + set_exitstatus(data, status); + } + g_pid = 0; + } + return (0); +} diff --git a/42sh/src/exec/ft_exec.c b/42sh/srcs/exec/ft_exec.c similarity index 100% rename from 42sh/src/exec/ft_exec.c rename to 42sh/srcs/exec/ft_exec.c diff --git a/42sh/src/exec/ft_findexec.c b/42sh/srcs/exec/ft_findexec.c similarity index 100% rename from 42sh/src/exec/ft_findexec.c rename to 42sh/srcs/exec/ft_findexec.c diff --git a/42sh/src/exec/set_exitstatus.c b/42sh/srcs/exec/set_exitstatus.c similarity index 100% rename from 42sh/src/exec/set_exitstatus.c rename to 42sh/srcs/exec/set_exitstatus.c diff --git a/42sh/srcs/glob/glob.c b/42sh/srcs/glob/glob.c new file mode 100644 index 00000000..49f54440 --- /dev/null +++ b/42sh/srcs/glob/glob.c @@ -0,0 +1,133 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* glob.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ +/* Updated: 2017/01/05 20:09:14 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +/* +** glob return expansion of a string. +** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab}. +** input parameters are : +** -char *pat -> pattern string to be looking for match +** -char **env -> env var. could be NULL + to just expanse in local directory and not in path +*/ + +static void ft_tabdel(char ***mytab) +{ + char **erase; + int i; + + if (!mytab || !*mytab) + return ; + erase = *mytab; + i = 0; + while (erase[i]) + { + ft_strdel(&erase[i]); + ++i; + } + free(*mytab); + *mytab = NULL; +} + +static int match_bracket(const char **pat, char **str) +{ + return (1); +} + +static int match_star(const char *pat, char *str) +{ + char *fix; + + fix = str + ft_strlen(str); + return (1); +} + +static int match_pattern(const char *pat, char *str) +{ + while (*pat) + { + if (*pat == '?') + str++; + else if (*pat == '[') + { + if (!match_bracket(&pat, &str)) + return (0); + } + else if (*pat == '*') + return (match_star(pat, str)); + else if (*pat == '\\') + { + if (!*++pat || *str != *pat) + return (0); + } + else if (*pat != *str) + return (0); + ++str; + } + return (*str ? 0 : 1); +} + +static void dir_research(const char *pat, char *path, t_ld **match) +{ + DIR *dir; + struct dirent *inside; + + if (!(dir = opendir(path))) + return ; + while ((inside = readdir(dir))) + { + if (match_pattern(pat, inside->d_name)) + ft_ld_pushfront(match, ft_strdup(inside->d_name)); + } +} + +static void path_research(const char *pat, char **path, t_ld **match) +{ + int i; + int len; + char *good_path; + + i = -1; + good_path = NULL; + while (path[++i]) + { + good_path = ft_strjoin(path[i], "/"); + while ((len = ft_strlen(good_path)) && good_path[len - 1] == '/' + && good_path[len - 2] == '/') + good_path[ft_strlen(good_path) - 1] = '\0'; + dir_research(pat, good_path, match); + ft_strdel(&good_path); + } +} + +char **glob(const char *pat, char **env) +{ + t_ld *match; + char **gl; + char **path; + + match = NULL; + gl = NULL; + if (env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) + { + path_research(pat, path, &match); + ft_tabdel(&path); + } + dir_research(pat, "./", &match); + if (match) + { + gl = ft_ld_to_tab(match); + ft_ld_clear(&match, &ft_strdel); + } + return (gl); +} diff --git a/42sh/srcs/glob/glob_print.c b/42sh/srcs/glob/glob_print.c new file mode 100644 index 00000000..eba06727 --- /dev/null +++ b/42sh/srcs/glob/glob_print.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* glob_print.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/05 16:09:40 by wescande #+# #+# */ +/* Updated: 2017/01/05 16:31:36 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_tabprint_fd(char **mytab, int fd) +{ + int i; + + if (!mytab || !*mytab) + return ; + i = 0; + while (mytab[i]) + { + ft_putendl_fd(mytab[i], fd); + ++i; + } +} + +void glob_print(t_list *lst, t_data *data) +{ + t_token *token; + int i; + t_type type; + char **glob_ret; + + while (lst) + { + i = 1; + token = lst->content; + type = token->type; + while (type >> (i++ + 2)) + ; + glob_ret = glob(token->data, data->env); + DG("%02i '%s'", i, token->data); + ft_tabprint_fd(glob_ret, 2); + lst = lst->next; + } +} diff --git a/42sh/srcs/glob/ld/ft_ld_back.c b/42sh/srcs/glob/ld/ft_ld_back.c new file mode 100644 index 00000000..d448f449 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_back.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_back.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/16 16:23:26 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:16:53 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +t_ld *ft_ld_back(t_ld *ld) +{ + if (ld) + while (ld->next) + ld = ld->next; + return (ld); +} diff --git a/42sh/srcs/glob/ld/ft_ld_clear.c b/42sh/srcs/glob/ld/ft_ld_clear.c new file mode 100644 index 00000000..962d3c11 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_clear.c @@ -0,0 +1,24 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_clear.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 19:56:49 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:11 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_ld_clear(t_ld **ld, void (*del)()) +{ + if (!ld || !*ld) + return ; + *ld = ft_ld_front(*ld); + while (*ld) + { + ft_ld_del(ld, del); + } +} diff --git a/42sh/srcs/glob/ld/ft_ld_del.c b/42sh/srcs/glob/ld/ft_ld_del.c new file mode 100644 index 00000000..69852e67 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_del.c @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_del.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/06 15:54:53 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:18 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_ld_del(t_ld **ld, void (*del)()) +{ + t_ld *next; + t_ld *prev; + + if (!ld || !*ld) + return ; + next = (*ld)->next; + prev = (*ld)->prev; + if ((*ld)->content && del) + del(&(*ld)->content); + free(*ld); + if (next) + next->prev = prev; + if (prev) + { + prev->next = next; + *ld = prev; + } + else + *ld = next; +} diff --git a/42sh/srcs/glob/ld/ft_ld_front.c b/42sh/srcs/glob/ld/ft_ld_front.c new file mode 100644 index 00000000..1599f49e --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_front.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_front.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 18:26:11 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:27 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +t_ld *ft_ld_front(t_ld *ld) +{ + if (ld) + while (ld->prev) + ld = ld->prev; + return (ld); +} diff --git a/42sh/srcs/glob/ld/ft_ld_new.c b/42sh/srcs/glob/ld/ft_ld_new.c new file mode 100644 index 00000000..eece5e18 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_new.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_new.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 18:17:34 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:34 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_ld_new(t_ld **alst, void *content) +{ + t_ld *new; + + if ((new = (t_ld *)malloc(sizeof(t_ld)))) + { + new->content = content; + new->prev = NULL; + new->next = NULL; + *alst = new; + } +} diff --git a/42sh/srcs/glob/ld/ft_ld_pushback.c b/42sh/srcs/glob/ld/ft_ld_pushback.c new file mode 100644 index 00000000..25a1d019 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_pushback.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_pushback.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/16 15:59:38 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:40 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_ld_pushback(t_ld **alst, void *content) +{ + t_ld *new; + t_ld *back; + + if (!alst || !*alst) + return (ft_ld_new(alst, content)); + if ((new = (t_ld *)malloc(sizeof(t_ld)))) + { + back = ft_ld_back(*alst); + new->prev = back; + new->next = NULL; + new->content = content; + back->next = new; + } +} diff --git a/42sh/srcs/glob/ld/ft_ld_pushfront.c b/42sh/srcs/glob/ld/ft_ld_pushfront.c new file mode 100644 index 00000000..5f830ee1 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_pushfront.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_pushfront.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 18:32:40 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:46 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_ld_pushfront(t_ld **alst, void *content) +{ + t_ld *new; + t_ld *front; + + if (!alst || !*alst) + return (ft_ld_new(alst, content)); + if ((new = (t_ld *)malloc(sizeof(t_ld)))) + { + front = ft_ld_front(*alst); + new->next = front; + new->prev = NULL; + new->content = content; + front->prev = new; + *alst = new; + } +} diff --git a/42sh/srcs/glob/ld/ft_ld_reverse.c b/42sh/srcs/glob/ld/ft_ld_reverse.c new file mode 100644 index 00000000..62ffe670 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_reverse.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_reverse.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/12 14:16:04 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:53 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_ld_reverse(t_ld **lst) +{ + t_ld *l_prev; + t_ld *l_next; + t_ld *l_cur; + + l_cur = ft_ld_front(*lst); + l_prev = NULL; + while (l_cur) + { + l_next = l_cur->next; + l_cur->next = l_prev; + l_cur->prev = l_next; + l_prev = l_cur; + l_cur = l_next; + } + *lst = l_prev; +} diff --git a/42sh/srcs/glob/ld/ft_ld_size.c b/42sh/srcs/glob/ld/ft_ld_size.c new file mode 100644 index 00000000..aab41b06 --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_size.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_size.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 18:33:48 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:17:59 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +size_t ft_ld_size(t_ld *ld) +{ + size_t size; + + size = 0; + ld = ft_ld_front(ld); + while (ld) + { + ++size; + ld = ld->next; + } + return (size); +} diff --git a/42sh/srcs/glob/ld/ft_ld_swap.c b/42sh/srcs/glob/ld/ft_ld_swap.c new file mode 100644 index 00000000..6e6ff87b --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_swap.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_swap.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/24 21:12:53 by wescande #+# #+# */ +/* Updated: 2017/01/05 14:18:06 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +t_ld *ft_ld_swap(t_ld *l_cur) +{ + t_ld *l_next; + t_ld *l_prev; + + l_next = l_cur; + if (l_cur && l_cur->next) + { + l_prev = l_cur->prev; + l_next = l_cur->next; + l_cur->next = l_next->next; + if (l_cur->next) + l_cur->next->prev = l_cur; + l_cur->prev = l_next; + l_next->next = l_cur; + l_next->prev = l_prev; + if (l_prev) + l_prev->next = l_next; + } + return (l_next); +} diff --git a/42sh/srcs/glob/ld/ft_ld_to_tab.c b/42sh/srcs/glob/ld/ft_ld_to_tab.c new file mode 100644 index 00000000..e6db262d --- /dev/null +++ b/42sh/srcs/glob/ld/ft_ld_to_tab.c @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_to_tab.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/05 16:17:00 by wescande #+# #+# */ +/* Updated: 2017/01/05 16:22:12 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +char **ft_ld_to_tab(t_ld *ld) +{ + char **my_tab; + int nb_item; + int index; + + if (!ld) + return (NULL); + nb_item = ft_ld_size(ld); + if (!(my_tab = (char **)malloc(sizeof(char *) * (nb_item + 1)))) + return (NULL); + index = 0; + while (ld) + { + my_tab[index++] = ft_strdup((char *)ld->content); + ld = ld->next; + } + my_tab[index] = NULL; + return (my_tab); +} diff --git a/42sh/src/lexer/ft_tokenize.c b/42sh/srcs/lexer/ft_tokenize.c similarity index 100% rename from 42sh/src/lexer/ft_tokenize.c rename to 42sh/srcs/lexer/ft_tokenize.c diff --git a/42sh/src/lexer/lexer_backslash.c b/42sh/srcs/lexer/lexer_backslash.c similarity index 100% rename from 42sh/src/lexer/lexer_backslash.c rename to 42sh/srcs/lexer/lexer_backslash.c diff --git a/42sh/src/lexer/lexer_default.c b/42sh/srcs/lexer/lexer_default.c similarity index 100% rename from 42sh/src/lexer/lexer_default.c rename to 42sh/srcs/lexer/lexer_default.c diff --git a/42sh/src/lexer/lexer_delim.c b/42sh/srcs/lexer/lexer_delim.c similarity index 100% rename from 42sh/src/lexer/lexer_delim.c rename to 42sh/srcs/lexer/lexer_delim.c diff --git a/42sh/src/lexer/lexer_dquote.c b/42sh/srcs/lexer/lexer_dquote.c similarity index 100% rename from 42sh/src/lexer/lexer_dquote.c rename to 42sh/srcs/lexer/lexer_dquote.c diff --git a/42sh/src/lexer/lexer_great.c b/42sh/srcs/lexer/lexer_great.c similarity index 100% rename from 42sh/src/lexer/lexer_great.c rename to 42sh/srcs/lexer/lexer_great.c diff --git a/42sh/src/lexer/lexer_greatand.c b/42sh/srcs/lexer/lexer_greatand.c similarity index 100% rename from 42sh/src/lexer/lexer_greatand.c rename to 42sh/srcs/lexer/lexer_greatand.c diff --git a/42sh/src/lexer/lexer_less.c b/42sh/srcs/lexer/lexer_less.c similarity index 100% rename from 42sh/src/lexer/lexer_less.c rename to 42sh/srcs/lexer/lexer_less.c diff --git a/42sh/src/lexer/lexer_lessand.c b/42sh/srcs/lexer/lexer_lessand.c similarity index 100% rename from 42sh/src/lexer/lexer_lessand.c rename to 42sh/srcs/lexer/lexer_lessand.c diff --git a/42sh/src/lexer/lexer_number.c b/42sh/srcs/lexer/lexer_number.c similarity index 100% rename from 42sh/src/lexer/lexer_number.c rename to 42sh/srcs/lexer/lexer_number.c diff --git a/42sh/src/lexer/lexer_quote.c b/42sh/srcs/lexer/lexer_quote.c similarity index 100% rename from 42sh/src/lexer/lexer_quote.c rename to 42sh/srcs/lexer/lexer_quote.c diff --git a/42sh/src/lexer/lexer_sep.c b/42sh/srcs/lexer/lexer_sep.c similarity index 100% rename from 42sh/src/lexer/lexer_sep.c rename to 42sh/srcs/lexer/lexer_sep.c diff --git a/42sh/src/lexer/lexer_word.c b/42sh/srcs/lexer/lexer_word.c similarity index 100% rename from 42sh/src/lexer/lexer_word.c rename to 42sh/srcs/lexer/lexer_word.c diff --git a/42sh/src/lexer/token_append.c b/42sh/srcs/lexer/token_append.c similarity index 100% rename from 42sh/src/lexer/token_append.c rename to 42sh/srcs/lexer/token_append.c diff --git a/42sh/src/lexer/token_cmp_type.c b/42sh/srcs/lexer/token_cmp_type.c similarity index 100% rename from 42sh/src/lexer/token_cmp_type.c rename to 42sh/srcs/lexer/token_cmp_type.c diff --git a/42sh/src/lexer/token_free.c b/42sh/srcs/lexer/token_free.c similarity index 100% rename from 42sh/src/lexer/token_free.c rename to 42sh/srcs/lexer/token_free.c diff --git a/42sh/src/lexer/token_init.c b/42sh/srcs/lexer/token_init.c similarity index 100% rename from 42sh/src/lexer/token_init.c rename to 42sh/srcs/lexer/token_init.c diff --git a/42sh/src/lexer/token_print.c b/42sh/srcs/lexer/token_print.c similarity index 100% rename from 42sh/src/lexer/token_print.c rename to 42sh/srcs/lexer/token_print.c diff --git a/42sh/src/line-editing/curs_ask.c b/42sh/srcs/line-editing/curs_ask.c similarity index 100% rename from 42sh/src/line-editing/curs_ask.c rename to 42sh/srcs/line-editing/curs_ask.c diff --git a/42sh/src/line-editing/curs_clear.c b/42sh/srcs/line-editing/curs_clear.c similarity index 100% rename from 42sh/src/line-editing/curs_clear.c rename to 42sh/srcs/line-editing/curs_clear.c diff --git a/42sh/src/line-editing/curs_goto.c b/42sh/srcs/line-editing/curs_goto.c similarity index 100% rename from 42sh/src/line-editing/curs_goto.c rename to 42sh/srcs/line-editing/curs_goto.c diff --git a/42sh/src/line-editing/curs_move.c b/42sh/srcs/line-editing/curs_move.c similarity index 100% rename from 42sh/src/line-editing/curs_move.c rename to 42sh/srcs/line-editing/curs_move.c diff --git a/42sh/src/line-editing/curs_setup.c b/42sh/srcs/line-editing/curs_setup.c similarity index 100% rename from 42sh/src/line-editing/curs_setup.c rename to 42sh/srcs/line-editing/curs_setup.c diff --git a/42sh/src/line-editing/curs_single.c b/42sh/srcs/line-editing/curs_single.c similarity index 100% rename from 42sh/src/line-editing/curs_single.c rename to 42sh/srcs/line-editing/curs_single.c diff --git a/42sh/src/line-editing/curs_term_setup.c b/42sh/srcs/line-editing/curs_term_setup.c similarity index 100% rename from 42sh/src/line-editing/curs_term_setup.c rename to 42sh/srcs/line-editing/curs_term_setup.c diff --git a/42sh/src/line-editing/curs_write.c b/42sh/srcs/line-editing/curs_write.c similarity index 100% rename from 42sh/src/line-editing/curs_write.c rename to 42sh/srcs/line-editing/curs_write.c diff --git a/42sh/srcs/line-editing/ft_interactive_sh.c b/42sh/srcs/line-editing/ft_interactive_sh.c new file mode 100644 index 00000000..5110f44b --- /dev/null +++ b/42sh/srcs/line-editing/ft_interactive_sh.c @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* interactive_sh.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: sbenning +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/10 09:44:43 by sbenning #+# #+# */ +/* Updated: 2016/12/10 10:24:12 by sbenning ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "line_editing.h" + +t_data **data_singleton(void) +{ + static t_data *data; + + return (&data); +} + +int ft_interactive_sh(t_data *data) +{ + *data_singleton() = data; + return (ft_readline(&data->line)); +} diff --git a/42sh/src/line-editing/ft_readline.c b/42sh/srcs/line-editing/ft_readline.c similarity index 100% rename from 42sh/src/line-editing/ft_readline.c rename to 42sh/srcs/line-editing/ft_readline.c diff --git a/42sh/src/line-editing/rl_bitset.c b/42sh/srcs/line-editing/rl_bitset.c similarity index 100% rename from 42sh/src/line-editing/rl_bitset.c rename to 42sh/srcs/line-editing/rl_bitset.c diff --git a/42sh/src/line-editing/rl_clear_function.c b/42sh/srcs/line-editing/rl_clear_function.c similarity index 100% rename from 42sh/src/line-editing/rl_clear_function.c rename to 42sh/srcs/line-editing/rl_clear_function.c diff --git a/42sh/src/line-editing/rl_clipboard_function.c b/42sh/srcs/line-editing/rl_clipboard_function.c similarity index 100% rename from 42sh/src/line-editing/rl_clipboard_function.c rename to 42sh/srcs/line-editing/rl_clipboard_function.c diff --git a/42sh/src/line-editing/rl_clipboard_utility.c b/42sh/srcs/line-editing/rl_clipboard_utility.c similarity index 100% rename from 42sh/src/line-editing/rl_clipboard_utility.c rename to 42sh/srcs/line-editing/rl_clipboard_utility.c diff --git a/42sh/src/line-editing/rl_comp_function.c b/42sh/srcs/line-editing/rl_comp_function.c similarity index 100% rename from 42sh/src/line-editing/rl_comp_function.c rename to 42sh/srcs/line-editing/rl_comp_function.c diff --git a/42sh/src/line-editing/rl_default_function.c b/42sh/srcs/line-editing/rl_default_function.c similarity index 100% rename from 42sh/src/line-editing/rl_default_function.c rename to 42sh/srcs/line-editing/rl_default_function.c diff --git a/42sh/src/line-editing/rl_display.c b/42sh/srcs/line-editing/rl_display.c similarity index 100% rename from 42sh/src/line-editing/rl_display.c rename to 42sh/srcs/line-editing/rl_display.c diff --git a/42sh/src/line-editing/rl_dynamic_buffer.c b/42sh/srcs/line-editing/rl_dynamic_buffer.c similarity index 100% rename from 42sh/src/line-editing/rl_dynamic_buffer.c rename to 42sh/srcs/line-editing/rl_dynamic_buffer.c diff --git a/42sh/src/line-editing/rl_long_move_function.c b/42sh/srcs/line-editing/rl_long_move_function.c similarity index 100% rename from 42sh/src/line-editing/rl_long_move_function.c rename to 42sh/srcs/line-editing/rl_long_move_function.c diff --git a/42sh/src/line-editing/rl_merge_line.c b/42sh/srcs/line-editing/rl_merge_line.c similarity index 100% rename from 42sh/src/line-editing/rl_merge_line.c rename to 42sh/srcs/line-editing/rl_merge_line.c diff --git a/42sh/src/line-editing/rl_page_move_function.c b/42sh/srcs/line-editing/rl_page_move_function.c similarity index 100% rename from 42sh/src/line-editing/rl_page_move_function.c rename to 42sh/srcs/line-editing/rl_page_move_function.c diff --git a/42sh/src/line-editing/rl_prompt.c b/42sh/srcs/line-editing/rl_prompt.c similarity index 100% rename from 42sh/src/line-editing/rl_prompt.c rename to 42sh/srcs/line-editing/rl_prompt.c diff --git a/42sh/src/line-editing/rl_quoting_function.c b/42sh/srcs/line-editing/rl_quoting_function.c similarity index 100% rename from 42sh/src/line-editing/rl_quoting_function.c rename to 42sh/srcs/line-editing/rl_quoting_function.c diff --git a/42sh/src/line-editing/rl_remove_function.c b/42sh/srcs/line-editing/rl_remove_function.c similarity index 100% rename from 42sh/src/line-editing/rl_remove_function.c rename to 42sh/srcs/line-editing/rl_remove_function.c diff --git a/42sh/src/line-editing/rl_setup.c b/42sh/srcs/line-editing/rl_setup.c similarity index 100% rename from 42sh/src/line-editing/rl_setup.c rename to 42sh/srcs/line-editing/rl_setup.c diff --git a/42sh/src/line-editing/rl_short_move_function.c b/42sh/srcs/line-editing/rl_short_move_function.c similarity index 100% rename from 42sh/src/line-editing/rl_short_move_function.c rename to 42sh/srcs/line-editing/rl_short_move_function.c diff --git a/42sh/src/line-editing/rl_stack_line.c b/42sh/srcs/line-editing/rl_stack_line.c similarity index 100% rename from 42sh/src/line-editing/rl_stack_line.c rename to 42sh/srcs/line-editing/rl_stack_line.c diff --git a/42sh/src/line-editing/rl_state_function.c b/42sh/srcs/line-editing/rl_state_function.c similarity index 100% rename from 42sh/src/line-editing/rl_state_function.c rename to 42sh/srcs/line-editing/rl_state_function.c diff --git a/42sh/src/line-editing/rl_word_move_function.c b/42sh/srcs/line-editing/rl_word_move_function.c similarity index 100% rename from 42sh/src/line-editing/rl_word_move_function.c rename to 42sh/srcs/line-editing/rl_word_move_function.c diff --git a/42sh/src/line-editing/rl_word_utility.c b/42sh/srcs/line-editing/rl_word_utility.c similarity index 100% rename from 42sh/src/line-editing/rl_word_utility.c rename to 42sh/srcs/line-editing/rl_word_utility.c diff --git a/42sh/src/main/data_exit.c b/42sh/srcs/main/data_exit.c similarity index 100% rename from 42sh/src/main/data_exit.c rename to 42sh/srcs/main/data_exit.c diff --git a/42sh/src/main/data_init.c b/42sh/srcs/main/data_init.c similarity index 100% rename from 42sh/src/main/data_init.c rename to 42sh/srcs/main/data_init.c diff --git a/42sh/srcs/main/ft_cleanup.c b/42sh/srcs/main/ft_cleanup.c new file mode 100644 index 00000000..7cf6aa3b --- /dev/null +++ b/42sh/srcs/main/ft_cleanup.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_cleanup.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 14:42:42 by jhalford #+# #+# */ +/* Updated: 2016/12/09 21:50:38 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +extern char **environ; +extern char PC; +extern char *UP; +extern char *BC; + +void ft_cleanup(void) +{ + struct termios term; + + DG("cleanup. char * UP at %p", UP); + DG("cleanup. char * BC at %p", BC); + if (tcgetattr(0, &term) == -1) + return ; + term.c_lflag |= ICANON | ISIG | ECHO; + if (tcsetattr(0, TCSANOW, &term) == -1) + return ; +} diff --git a/42sh/src/main/ft_putast.c b/42sh/srcs/main/ft_putast.c similarity index 100% rename from 42sh/src/main/ft_putast.c rename to 42sh/srcs/main/ft_putast.c diff --git a/42sh/src/main/ft_putast2.c b/42sh/srcs/main/ft_putast2.c similarity index 100% rename from 42sh/src/main/ft_putast2.c rename to 42sh/srcs/main/ft_putast2.c diff --git a/42sh/srcs/main/lib_expansion.c b/42sh/srcs/main/lib_expansion.c new file mode 100644 index 00000000..8905c284 --- /dev/null +++ b/42sh/srcs/main/lib_expansion.c @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* lib_expansion.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/03 13:37:41 by jhalford #+# #+# */ +/* Updated: 2016/12/03 13:37:41 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +void ft_expand_dollar(char **av, char **env) +{ + char *dollar; + + while (*av) + { + if ((dollar = ft_strchr(*av, '$'))) + { + *dollar = '\0'; + *av = ft_strjoin(*av, ft_getenv(env, dollar + 1)); + } + av++; + } +} diff --git a/42sh/src/main/main.c b/42sh/srcs/main/main.c similarity index 78% rename from 42sh/src/main/main.c rename to 42sh/srcs/main/main.c index 27e00034..0228f689 100644 --- a/42sh/src/main/main.c +++ b/42sh/srcs/main/main.c @@ -6,7 +6,11 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */ +<<<<<<< HEAD:src/main/main.c /* Updated: 2017/01/12 14:02:30 by jhalford ### ########.fr */ +======= +/* Updated: 2017/01/05 16:07:09 by wescande ### ########.fr */ +>>>>>>> premier commit. working. . .:srcs/main/main.c /* */ /* ************************************************************************** */ @@ -52,7 +56,21 @@ int main(int ac, char **av) } while (1) { +<<<<<<< HEAD:src/main/main.c if (ft_readline()) +======= + if (ft_interactive_sh(&data)) + return (1); + DG("{inv}{mag}got command '%s'", data.line.input); + token = NULL; + if (ft_tokenize(&token, data.line.input, DEFAULT)) + return (1); + if (!token) + continue ; +// token_print(token); + glob_print(token, &data); + if (ft_parse(&ast, &token)) +>>>>>>> premier commit. working. . .:srcs/main/main.c return (1); if (shell_single_command(data_singleton()->line.input)) return (1); diff --git a/42sh/srcs/main/sig_handler.c b/42sh/srcs/main/sig_handler.c new file mode 100644 index 00000000..d56b03ee --- /dev/null +++ b/42sh/srcs/main/sig_handler.c @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* sig_handler.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: jhalford +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/12/01 12:43:22 by jhalford #+# #+# */ +/* Updated: 2016/12/03 13:31:33 by jhalford ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +pid_t g_pid; + +void sig_handler(int signo) +{ + (void)signo; + if (signo == SIGINT) + { + if (g_pid) + kill(g_pid, SIGINT); + if (kill(g_pid, 0) == 0) + ft_putendl(""); + } +} diff --git a/42sh/src/parser/ft_parse.c b/42sh/srcs/parser/ft_parse.c similarity index 100% rename from 42sh/src/parser/ft_parse.c rename to 42sh/srcs/parser/ft_parse.c diff --git a/42sh/src/parser/parse_dgreat.c b/42sh/srcs/parser/parse_dgreat.c similarity index 100% rename from 42sh/src/parser/parse_dgreat.c rename to 42sh/srcs/parser/parse_dgreat.c diff --git a/42sh/src/parser/parse_dless.c b/42sh/srcs/parser/parse_dless.c similarity index 100% rename from 42sh/src/parser/parse_dless.c rename to 42sh/srcs/parser/parse_dless.c diff --git a/42sh/src/parser/parse_great.c b/42sh/srcs/parser/parse_great.c similarity index 100% rename from 42sh/src/parser/parse_great.c rename to 42sh/srcs/parser/parse_great.c diff --git a/42sh/src/parser/parse_greatand.c b/42sh/srcs/parser/parse_greatand.c similarity index 100% rename from 42sh/src/parser/parse_greatand.c rename to 42sh/srcs/parser/parse_greatand.c diff --git a/42sh/src/parser/parse_less.c b/42sh/srcs/parser/parse_less.c similarity index 100% rename from 42sh/src/parser/parse_less.c rename to 42sh/srcs/parser/parse_less.c diff --git a/42sh/src/parser/parse_lessand.c b/42sh/srcs/parser/parse_lessand.c similarity index 100% rename from 42sh/src/parser/parse_lessand.c rename to 42sh/srcs/parser/parse_lessand.c diff --git a/42sh/src/parser/parse_separator.c b/42sh/srcs/parser/parse_separator.c similarity index 100% rename from 42sh/src/parser/parse_separator.c rename to 42sh/srcs/parser/parse_separator.c diff --git a/42sh/src/parser/parse_word.c b/42sh/srcs/parser/parse_word.c similarity index 100% rename from 42sh/src/parser/parse_word.c rename to 42sh/srcs/parser/parse_word.c From 87b70c835894c75d11ffcb3e5556987ec63fd87a Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 12 Jan 2017 18:43:27 +0100 Subject: [PATCH 02/15] le match fonctionne avec les [ab], les [a-z] les [^ ou avec le ! a-z] et Il manque encore le * et les {}. Gestion du ~ a ajouter aussi --- 42sh/includes/glob.h | 2 +- 42sh/srcs/glob/glob.c | 74 +++++++++++++++++++++++++++++++------ 42sh/srcs/glob/glob_print.c | 2 +- 3 files changed, 65 insertions(+), 13 deletions(-) diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index 4df7b651..4ad01613 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/05 16:20:32 by wescande ### ########.fr */ +/* Updated: 2017/01/12 17:14:38 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/srcs/glob/glob.c b/42sh/srcs/glob/glob.c index 49f54440..7aff12d4 100644 --- a/42sh/srcs/glob/glob.c +++ b/42sh/srcs/glob/glob.c @@ -6,20 +6,20 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/05 20:09:14 by wescande ### ########.fr */ +/* Updated: 2017/01/12 18:37:44 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ #include "glob.h" /* -** glob return expansion of a string. -** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab}. -** input parameters are : -** -char *pat -> pattern string to be looking for match -** -char **env -> env var. could be NULL - to just expanse in local directory and not in path -*/ + ** glob return expansion of a string. + ** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab}. + ** input parameters are : + ** -char *pat -> pattern string to be looking for match + ** -char **env -> env var. could be NULL + ** to just expanse in local directory and not in path + */ static void ft_tabdel(char ***mytab) { @@ -39,15 +39,66 @@ static void ft_tabdel(char ***mytab) *mytab = NULL; } -static int match_bracket(const char **pat, char **str) +static int match_bracket_char(char **cmp, const char *pat, char c, int neg) { - return (1); + int dir; + char s; + + if ((*cmp + 2) < pat && (*cmp)[1] == '-' && (s = (*cmp)[0])) + { + dir = s > (*cmp)[2]; + while ((dir && s >= (*cmp)[2]) || (!dir && s <= (*cmp)[2])) + { + if (!neg && s == c) + return (1); + else if (neg && s == c) + return (0); + s += (dir * -2 + 1); + } + *cmp += 2; + } + else if (!neg && **cmp == c) + { + return (1); + } + else if (neg && **cmp == c) + { + return (0); + } + return (-1); +} + +static int match_bracket(const char **pat, char c) +{ + char *cmp; + int neg; + int ret; + + cmp = (char *)*pat + 1; + while (**pat != ']') + { + if (!**pat) + return (0); + ++*pat; + } + neg = 0; + if ((*cmp == '^' || *cmp == '!') && ++neg) + ++cmp; + while (cmp < *pat) + { + ret = match_bracket_char(&cmp, *pat, c, neg); + if (ret != -1) + return (ret); + ++cmp; + } + return (neg); } static int match_star(const char *pat, char *str) { char *fix; + (void)pat; fix = str + ft_strlen(str); return (1); } @@ -60,7 +111,7 @@ static int match_pattern(const char *pat, char *str) str++; else if (*pat == '[') { - if (!match_bracket(&pat, &str)) + if (!match_bracket(&pat, *str)) return (0); } else if (*pat == '*') @@ -73,6 +124,7 @@ static int match_pattern(const char *pat, char *str) else if (*pat != *str) return (0); ++str; + ++pat; } return (*str ? 0 : 1); } diff --git a/42sh/srcs/glob/glob_print.c b/42sh/srcs/glob/glob_print.c index eba06727..828089a5 100644 --- a/42sh/srcs/glob/glob_print.c +++ b/42sh/srcs/glob/glob_print.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/05 16:09:40 by wescande #+# #+# */ -/* Updated: 2017/01/05 16:31:36 by wescande ### ########.fr */ +/* Updated: 2017/01/12 15:48:03 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ From 9cfecf1130a7707493f61b4070e26a9f47fde34a Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 12 Jan 2017 18:52:42 +0100 Subject: [PATCH 03/15] ajout du match avec *, pas de recursivite sur ** ni sur */*/*/* --- 42sh/srcs/glob/glob.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/42sh/srcs/glob/glob.c b/42sh/srcs/glob/glob.c index 7aff12d4..2731809b 100644 --- a/42sh/srcs/glob/glob.c +++ b/42sh/srcs/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/12 18:37:44 by wescande ### ########.fr */ +/* Updated: 2017/01/12 18:48:26 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -94,13 +94,22 @@ static int match_bracket(const char **pat, char c) return (neg); } +static int match_pattern(const char *pat, char *str); + static int match_star(const char *pat, char *str) { char *fix; - (void)pat; + if (!pat[1]) + return (1); fix = str + ft_strlen(str); - return (1); + while (fix > str) + { + if (match_pattern(pat + 1, fix)) + return (1); + --fix; + } + return (0); } static int match_pattern(const char *pat, char *str) From 6102eda2df31bf11f7f8b881918dab06b18d2f43 Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 12 Jan 2017 20:25:15 +0100 Subject: [PATCH 04/15] ajout de l'expand des brace, reste a travailler sur le tri du tableau de retour pour l'avoir par ordre ascii --- 42sh/Makefile | 1 + 42sh/includes/glob.h | 3 +- 42sh/srcs/glob/expand_brace.c | 108 ++++++++++++++++++++++++++++++++++ 42sh/srcs/glob/glob.c | 17 ++++-- 4 files changed, 123 insertions(+), 6 deletions(-) create mode 100644 42sh/srcs/glob/expand_brace.c diff --git a/42sh/Makefile b/42sh/Makefile index 022c2fe2..0da8e579 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -143,6 +143,7 @@ exec/ft_cmd.c\ exec/ft_exec.c\ exec/ft_findexec.c\ exec/set_exitstatus.c\ +glob/expand_brace.c\ glob/glob.c\ glob/glob_print.c\ glob/ld/ft_ld_back.c\ diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index 4ad01613..c1afce7c 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/12 17:14:38 by wescande ### ########.fr */ +/* Updated: 2017/01/12 19:00:08 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,6 +23,7 @@ typedef struct s_ld } t_ld; char **glob(const char *str, char **env); +t_ld *expand_brace(const char *pat); void glob_print(t_list *token, t_data *data); /* diff --git a/42sh/srcs/glob/expand_brace.c b/42sh/srcs/glob/expand_brace.c new file mode 100644 index 00000000..2fe05f61 --- /dev/null +++ b/42sh/srcs/glob/expand_brace.c @@ -0,0 +1,108 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* expand_brace.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/12 19:00:29 by wescande #+# #+# */ +/* Updated: 2017/01/12 20:24:00 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +/* + ** expand_brace return expansion of a string. + ** pattern searched are {ab, cd}. + ** return is t_ld which first param is ab and second is cd + ** input parameters are : + ** -char *pat -> pattern string to be looking for expand + */ + +static char *ft_strjoinf(char *s1, char *s2, int state) +{ + char *ans; + + ans = ft_strjoin((const char *)s1, (const char *)s2); + if (state == 1 || state == 3) + ft_strdel(&s1); + if (state == 2 || state == 3) + ft_strdel(&s2); + return (ans); +} + +static void ft_tabdel(char ***mytab) +{ + char **erase; + int i; + + if (!mytab || !*mytab) + return ; + erase = *mytab; + i = 0; + while (erase[i]) + { + ft_strdel(&erase[i]); + ++i; + } + free(*mytab); + *mytab = NULL; +} + +static int search_brace(t_ld **wk, char *str, int index) +{ + char *start; + char *s1; + char **split; + + start = NULL; + while (*str) + { + if (*str == '{') + start = str; + else if (*str == '}' && start) + { + s1 = ft_strsub(start, 1, str - start - 1); + split = ft_strsplit(s1, ','); + ft_strdel(&s1); + s1 = ft_strsub((*wk)->content, 0, start - (char *)(*wk)->content); + while (split[++index]) + ft_ld_pushfront(wk, ft_strjoinf(ft_strjoin(s1, split[index]), + str + 1, 1)); + ft_strdel(&s1); + ft_tabdel(&split); + return (1); + } + ++str; + } + return (0); +} + +t_ld *expand_brace(const char *pat) +{ + t_ld *ret; + t_ld *tmp; + int do_it; + + ret = NULL; + ft_ld_pushfront(&ret, ft_strdup(pat)); + do_it = 1; + while (do_it) + { + do_it = 0; + while (ret) + { + if ((tmp = ret) && search_brace(&ret, ret->content, -1)) + { + ft_ld_del(&tmp, &ft_strdel); + do_it = 1; + } + if (!ret->next) + break; + ret = ret->next; + } + ret = ft_ld_front(ret); + } + return (ret); +} diff --git a/42sh/srcs/glob/glob.c b/42sh/srcs/glob/glob.c index 2731809b..cc68bb11 100644 --- a/42sh/srcs/glob/glob.c +++ b/42sh/srcs/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/12 18:48:26 by wescande ### ########.fr */ +/* Updated: 2017/01/12 19:00:12 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -176,15 +176,22 @@ char **glob(const char *pat, char **env) t_ld *match; char **gl; char **path; + t_ld *mul_pat; match = NULL; gl = NULL; - if (env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) + mul_pat = expand_brace(pat); + while (mul_pat) { - path_research(pat, path, &match); - ft_tabdel(&path); + if (env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) + { + path_research(mul_pat->content, path, &match); + ft_tabdel(&path); + } + dir_research(mul_pat->content, "./", &match); + mul_pat = mul_pat->next; } - dir_research(pat, "./", &match); + ft_ld_clear(&mul_pat, &ft_strdel); if (match) { gl = ft_ld_to_tab(match); From c556b0eea5cc4bb24354fd662e990841526a5327 Mon Sep 17 00:00:00 2001 From: wescande Date: Tue, 24 Jan 2017 20:44:14 +0100 Subject: [PATCH 05/15] ajout de la recherche recursive sur le globbing et du chemin absolu. (/*/*/*) toujours pas de gestion du double star (**) --- 42sh/Makefile | 27 +-- 42sh/includes/glob.h | 12 +- 42sh/srcs/glob/dir_glob.c | 48 +++++ 42sh/srcs/glob/expand_brace.c | 49 +---- 42sh/srcs/glob/glob.c | 187 +++--------------- 42sh/srcs/glob/{ld => lib_perso}/ft_ld_back.c | 0 .../srcs/glob/{ld => lib_perso}/ft_ld_clear.c | 0 42sh/srcs/glob/{ld => lib_perso}/ft_ld_del.c | 0 .../srcs/glob/{ld => lib_perso}/ft_ld_front.c | 0 42sh/srcs/glob/{ld => lib_perso}/ft_ld_new.c | 0 42sh/srcs/glob/lib_perso/ft_ld_order.c | 35 ++++ .../glob/{ld => lib_perso}/ft_ld_pushback.c | 0 .../glob/{ld => lib_perso}/ft_ld_pushfront.c | 0 .../glob/{ld => lib_perso}/ft_ld_reverse.c | 0 42sh/srcs/glob/{ld => lib_perso}/ft_ld_size.c | 0 42sh/srcs/glob/{ld => lib_perso}/ft_ld_swap.c | 0 .../glob/{ld => lib_perso}/ft_ld_to_tab.c | 0 42sh/srcs/glob/lib_perso/ft_strjoinf.c | 25 +++ 42sh/srcs/glob/lib_perso/ft_tabdel.c | 31 +++ 42sh/srcs/glob/match_pattern.c | 123 ++++++++++++ 42sh/update_makefile.sh | 17 ++ 21 files changed, 342 insertions(+), 212 deletions(-) create mode 100644 42sh/srcs/glob/dir_glob.c rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_back.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_clear.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_del.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_front.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_new.c (100%) create mode 100644 42sh/srcs/glob/lib_perso/ft_ld_order.c rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_pushback.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_pushfront.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_reverse.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_size.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_swap.c (100%) rename 42sh/srcs/glob/{ld => lib_perso}/ft_ld_to_tab.c (100%) create mode 100644 42sh/srcs/glob/lib_perso/ft_strjoinf.c create mode 100644 42sh/srcs/glob/lib_perso/ft_tabdel.c create mode 100644 42sh/srcs/glob/match_pattern.c create mode 100755 42sh/update_makefile.sh diff --git a/42sh/Makefile b/42sh/Makefile index 0da8e579..351322b4 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -143,20 +143,25 @@ exec/ft_cmd.c\ exec/ft_exec.c\ exec/ft_findexec.c\ exec/set_exitstatus.c\ +glob/dir_glob.c\ glob/expand_brace.c\ glob/glob.c\ glob/glob_print.c\ -glob/ld/ft_ld_back.c\ -glob/ld/ft_ld_clear.c\ -glob/ld/ft_ld_del.c\ -glob/ld/ft_ld_front.c\ -glob/ld/ft_ld_new.c\ -glob/ld/ft_ld_pushback.c\ -glob/ld/ft_ld_pushfront.c\ -glob/ld/ft_ld_reverse.c\ -glob/ld/ft_ld_size.c\ -glob/ld/ft_ld_swap.c\ -glob/ld/ft_ld_to_tab.c\ +glob/lib_perso/ft_ld_back.c\ +glob/lib_perso/ft_ld_clear.c\ +glob/lib_perso/ft_ld_del.c\ +glob/lib_perso/ft_ld_front.c\ +glob/lib_perso/ft_ld_new.c\ +glob/lib_perso/ft_ld_order.c\ +glob/lib_perso/ft_ld_pushback.c\ +glob/lib_perso/ft_ld_pushfront.c\ +glob/lib_perso/ft_ld_reverse.c\ +glob/lib_perso/ft_ld_size.c\ +glob/lib_perso/ft_ld_swap.c\ +glob/lib_perso/ft_ld_to_tab.c\ +glob/lib_perso/ft_strjoinf.c\ +glob/lib_perso/ft_tabdel.c\ +glob/match_pattern.c\ lexer/ft_tokenize.c\ lexer/lexer_backslash.c\ lexer/lexer_default.c\ diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index c1afce7c..50038348 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/12 19:00:08 by wescande ### ########.fr */ +/* Updated: 2017/01/24 19:27:53 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,6 +25,9 @@ typedef struct s_ld char **glob(const char *str, char **env); t_ld *expand_brace(const char *pat); void glob_print(t_list *token, t_data *data); +int match_pattern(const char *pat, char *str, char *full_word, t_ld **match); +void dir_research(const char *pat, char *path, t_ld **match); +bool is_directory(const char *path); /* ** LIST D: @@ -40,6 +43,13 @@ void ft_ld_reverse(t_ld **lst); t_ld *ft_ld_back(t_ld *ld); t_ld *ft_ld_swap(t_ld *l_cur); char **ft_ld_to_tab(t_ld *ld); +t_ld *ft_ld_order(t_ld *ld, int (*f)(), void (*del)()); +/* +** str: +*/ + +char *ft_strjoinf(char *str, char *str2, int mode); +void ft_tabdel(char ***mytab); #endif diff --git a/42sh/srcs/glob/dir_glob.c b/42sh/srcs/glob/dir_glob.c new file mode 100644 index 00000000..6d8b0b27 --- /dev/null +++ b/42sh/srcs/glob/dir_glob.c @@ -0,0 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* glob.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ +/* Updated: 2017/01/24 19:10:52 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +bool is_directory(const char *path) +{ + struct stat path_stat; + + stat(path, &path_stat); + return (S_ISDIR(path_stat.st_mode)); +} + +void dir_research(const char *pat, char *p, t_ld **match) +{ + DIR *dir; + struct dirent *in; + char *path_tmp; + + if (ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.') + { + if (!(dir = opendir(p))) + return ; + while ((in = readdir(dir))) + { + if (ft_strcmp(in->d_name, ".") && ft_strcmp(in->d_name, "..")) + { + if (*p == '/' && !*(p + 1)) + path_tmp = ft_strjoin(p, in->d_name); + else + path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1); + if (match_pattern(pat, in->d_name, path_tmp, match)) + ft_ld_pushfront(match, ft_strdup(path_tmp + 2 * + (path_tmp[0] == '.' && path_tmp[1] == '/'))); + ft_strdel(&path_tmp); + } + } + } +} diff --git a/42sh/srcs/glob/expand_brace.c b/42sh/srcs/glob/expand_brace.c index 2fe05f61..501b7ac9 100644 --- a/42sh/srcs/glob/expand_brace.c +++ b/42sh/srcs/glob/expand_brace.c @@ -6,49 +6,19 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/12 19:00:29 by wescande #+# #+# */ -/* Updated: 2017/01/12 20:24:00 by wescande ### ########.fr */ +/* Updated: 2017/01/24 19:15:35 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ #include "glob.h" /* - ** expand_brace return expansion of a string. - ** pattern searched are {ab, cd}. - ** return is t_ld which first param is ab and second is cd - ** input parameters are : - ** -char *pat -> pattern string to be looking for expand - */ - -static char *ft_strjoinf(char *s1, char *s2, int state) -{ - char *ans; - - ans = ft_strjoin((const char *)s1, (const char *)s2); - if (state == 1 || state == 3) - ft_strdel(&s1); - if (state == 2 || state == 3) - ft_strdel(&s2); - return (ans); -} - -static void ft_tabdel(char ***mytab) -{ - char **erase; - int i; - - if (!mytab || !*mytab) - return ; - erase = *mytab; - i = 0; - while (erase[i]) - { - ft_strdel(&erase[i]); - ++i; - } - free(*mytab); - *mytab = NULL; -} +** expand_brace return expansion of a string. +** pattern searched are {ab, cd}. +** return is t_ld which first param is ab and second is cd +** input parameters are : +** -char *pat -> pattern string to be looking for expand +*/ static int search_brace(t_ld **wk, char *str, int index) { @@ -86,20 +56,19 @@ t_ld *expand_brace(const char *pat) int do_it; ret = NULL; + ft_ld_pushfront(&ret, ft_strdup("")); ft_ld_pushfront(&ret, ft_strdup(pat)); do_it = 1; while (do_it) { do_it = 0; - while (ret) + while (ret->next) { if ((tmp = ret) && search_brace(&ret, ret->content, -1)) { ft_ld_del(&tmp, &ft_strdel); do_it = 1; } - if (!ret->next) - break; ret = ret->next; } ret = ft_ld_front(ret); diff --git a/42sh/srcs/glob/glob.c b/42sh/srcs/glob/glob.c index cc68bb11..59709902 100644 --- a/42sh/srcs/glob/glob.c +++ b/42sh/srcs/glob/glob.c @@ -6,196 +6,63 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/12 19:00:12 by wescande ### ########.fr */ +/* Updated: 2017/01/24 20:42:45 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ #include "glob.h" /* - ** glob return expansion of a string. - ** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab}. - ** input parameters are : - ** -char *pat -> pattern string to be looking for match - ** -char **env -> env var. could be NULL - ** to just expanse in local directory and not in path - */ - -static void ft_tabdel(char ***mytab) -{ - char **erase; - int i; - - if (!mytab || !*mytab) - return ; - erase = *mytab; - i = 0; - while (erase[i]) - { - ft_strdel(&erase[i]); - ++i; - } - free(*mytab); - *mytab = NULL; -} - -static int match_bracket_char(char **cmp, const char *pat, char c, int neg) -{ - int dir; - char s; - - if ((*cmp + 2) < pat && (*cmp)[1] == '-' && (s = (*cmp)[0])) - { - dir = s > (*cmp)[2]; - while ((dir && s >= (*cmp)[2]) || (!dir && s <= (*cmp)[2])) - { - if (!neg && s == c) - return (1); - else if (neg && s == c) - return (0); - s += (dir * -2 + 1); - } - *cmp += 2; - } - else if (!neg && **cmp == c) - { - return (1); - } - else if (neg && **cmp == c) - { - return (0); - } - return (-1); -} - -static int match_bracket(const char **pat, char c) -{ - char *cmp; - int neg; - int ret; - - cmp = (char *)*pat + 1; - while (**pat != ']') - { - if (!**pat) - return (0); - ++*pat; - } - neg = 0; - if ((*cmp == '^' || *cmp == '!') && ++neg) - ++cmp; - while (cmp < *pat) - { - ret = match_bracket_char(&cmp, *pat, c, neg); - if (ret != -1) - return (ret); - ++cmp; - } - return (neg); -} - -static int match_pattern(const char *pat, char *str); - -static int match_star(const char *pat, char *str) -{ - char *fix; - - if (!pat[1]) - return (1); - fix = str + ft_strlen(str); - while (fix > str) - { - if (match_pattern(pat + 1, fix)) - return (1); - --fix; - } - return (0); -} - -static int match_pattern(const char *pat, char *str) -{ - while (*pat) - { - if (*pat == '?') - str++; - else if (*pat == '[') - { - if (!match_bracket(&pat, *str)) - return (0); - } - else if (*pat == '*') - return (match_star(pat, str)); - else if (*pat == '\\') - { - if (!*++pat || *str != *pat) - return (0); - } - else if (*pat != *str) - return (0); - ++str; - ++pat; - } - return (*str ? 0 : 1); -} - -static void dir_research(const char *pat, char *path, t_ld **match) -{ - DIR *dir; - struct dirent *inside; - - if (!(dir = opendir(path))) - return ; - while ((inside = readdir(dir))) - { - if (match_pattern(pat, inside->d_name)) - ft_ld_pushfront(match, ft_strdup(inside->d_name)); - } -} +** glob return expansion of a string. +** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab}. +** input parameters are : +** -char *pat -> pattern string to be looking for match +** -char **env -> env var. could be NULL +** to just expanse in local directory and not in path +*/ static void path_research(const char *pat, char **path, t_ld **match) { int i; - int len; - char *good_path; i = -1; - good_path = NULL; while (path[++i]) - { - good_path = ft_strjoin(path[i], "/"); - while ((len = ft_strlen(good_path)) && good_path[len - 1] == '/' - && good_path[len - 2] == '/') - good_path[ft_strlen(good_path) - 1] = '\0'; - dir_research(pat, good_path, match); - ft_strdel(&good_path); - } + dir_research(pat, path[i], match); +} + +static char **treat_glob(t_ld **match) +{ + char **gl; + + gl = NULL; + ft_ld_reverse(match); + *match = ft_ld_order(*match, &ft_strcmp, &ft_strdel); + gl = ft_ld_to_tab(*match); + ft_ld_clear(match, &ft_strdel); + return (gl); } char **glob(const char *pat, char **env) { t_ld *match; - char **gl; char **path; t_ld *mul_pat; match = NULL; - gl = NULL; mul_pat = expand_brace(pat); - while (mul_pat) + while (mul_pat->next) { if (env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) { path_research(mul_pat->content, path, &match); ft_tabdel(&path); } - dir_research(mul_pat->content, "./", &match); + if (((char *)mul_pat->content)[0] != '/') + dir_research(mul_pat->content, ".", &match); + else + dir_research(mul_pat->content + 1, "/", &match); mul_pat = mul_pat->next; } ft_ld_clear(&mul_pat, &ft_strdel); - if (match) - { - gl = ft_ld_to_tab(match); - ft_ld_clear(&match, &ft_strdel); - } - return (gl); + return (treat_glob(&match)); } diff --git a/42sh/srcs/glob/ld/ft_ld_back.c b/42sh/srcs/glob/lib_perso/ft_ld_back.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_back.c rename to 42sh/srcs/glob/lib_perso/ft_ld_back.c diff --git a/42sh/srcs/glob/ld/ft_ld_clear.c b/42sh/srcs/glob/lib_perso/ft_ld_clear.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_clear.c rename to 42sh/srcs/glob/lib_perso/ft_ld_clear.c diff --git a/42sh/srcs/glob/ld/ft_ld_del.c b/42sh/srcs/glob/lib_perso/ft_ld_del.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_del.c rename to 42sh/srcs/glob/lib_perso/ft_ld_del.c diff --git a/42sh/srcs/glob/ld/ft_ld_front.c b/42sh/srcs/glob/lib_perso/ft_ld_front.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_front.c rename to 42sh/srcs/glob/lib_perso/ft_ld_front.c diff --git a/42sh/srcs/glob/ld/ft_ld_new.c b/42sh/srcs/glob/lib_perso/ft_ld_new.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_new.c rename to 42sh/srcs/glob/lib_perso/ft_ld_new.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_order.c b/42sh/srcs/glob/lib_perso/ft_ld_order.c new file mode 100644 index 00000000..6f6b2a9c --- /dev/null +++ b/42sh/srcs/glob/lib_perso/ft_ld_order.c @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_ld_order.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/24 19:20:45 by wescande #+# #+# */ +/* Updated: 2017/01/24 19:40:54 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +t_ld *ft_ld_order(t_ld *ld, int (*f)(), void (*del)()) +{ + int swap; + + swap = 1; + ld = ft_ld_front(ld); + while (swap) + { + swap = 0; + while (ld && ld->next) + { + if (f(ld->content, ld->next->content) > 0 && (swap = 1)) + ld = ft_ld_swap(ld); + else if (!f(ld->content, ld->next->content)) + ft_ld_del(&ld, del); + ld = ld->next; + } + ld = ft_ld_front(ld); + } + return (ld); +} diff --git a/42sh/srcs/glob/ld/ft_ld_pushback.c b/42sh/srcs/glob/lib_perso/ft_ld_pushback.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_pushback.c rename to 42sh/srcs/glob/lib_perso/ft_ld_pushback.c diff --git a/42sh/srcs/glob/ld/ft_ld_pushfront.c b/42sh/srcs/glob/lib_perso/ft_ld_pushfront.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_pushfront.c rename to 42sh/srcs/glob/lib_perso/ft_ld_pushfront.c diff --git a/42sh/srcs/glob/ld/ft_ld_reverse.c b/42sh/srcs/glob/lib_perso/ft_ld_reverse.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_reverse.c rename to 42sh/srcs/glob/lib_perso/ft_ld_reverse.c diff --git a/42sh/srcs/glob/ld/ft_ld_size.c b/42sh/srcs/glob/lib_perso/ft_ld_size.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_size.c rename to 42sh/srcs/glob/lib_perso/ft_ld_size.c diff --git a/42sh/srcs/glob/ld/ft_ld_swap.c b/42sh/srcs/glob/lib_perso/ft_ld_swap.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_swap.c rename to 42sh/srcs/glob/lib_perso/ft_ld_swap.c diff --git a/42sh/srcs/glob/ld/ft_ld_to_tab.c b/42sh/srcs/glob/lib_perso/ft_ld_to_tab.c similarity index 100% rename from 42sh/srcs/glob/ld/ft_ld_to_tab.c rename to 42sh/srcs/glob/lib_perso/ft_ld_to_tab.c diff --git a/42sh/srcs/glob/lib_perso/ft_strjoinf.c b/42sh/srcs/glob/lib_perso/ft_strjoinf.c new file mode 100644 index 00000000..3bc72d56 --- /dev/null +++ b/42sh/srcs/glob/lib_perso/ft_strjoinf.c @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_strjoinf.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2016/11/05 13:33:24 by wescande #+# #+# */ +/* Updated: 2017/01/24 16:53:13 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +char *ft_strjoinf(char *s1, char *s2, int state) +{ + char *ans; + + ans = ft_strjoin((const char *)s1, (const char *)s2); + if (state == 1 || state == 3) + ft_strdel(&s1); + if (state == 2 || state == 3) + ft_strdel(&s2); + return (ans); +} diff --git a/42sh/srcs/glob/lib_perso/ft_tabdel.c b/42sh/srcs/glob/lib_perso/ft_tabdel.c new file mode 100644 index 00000000..ac72a1a1 --- /dev/null +++ b/42sh/srcs/glob/lib_perso/ft_tabdel.c @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* glob.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ +/* Updated: 2017/01/24 16:52:50 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +void ft_tabdel(char ***mytab) +{ + char **erase; + int i; + + if (!mytab || !*mytab) + return ; + erase = *mytab; + i = 0; + while (erase[i]) + { + ft_strdel(&erase[i]); + ++i; + } + free(*mytab); + *mytab = NULL; +} diff --git a/42sh/srcs/glob/match_pattern.c b/42sh/srcs/glob/match_pattern.c new file mode 100644 index 00000000..84b7c107 --- /dev/null +++ b/42sh/srcs/glob/match_pattern.c @@ -0,0 +1,123 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* match_pattern.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/24 17:30:23 by wescande #+# #+# */ +/* Updated: 2017/01/24 20:42:30 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +static int match_bracket_char(char **cmp, const char *pat, char c, int neg) +{ + int dir; + char s; + + if ((*cmp + 2) < pat && (*cmp)[1] == '-' && (s = (*cmp)[0])) + { + dir = s > (*cmp)[2]; + while ((dir && s >= (*cmp)[2]) || (!dir && s <= (*cmp)[2])) + { + if (!neg && s == c) + return (1); + else if (neg && s == c) + return (0); + s += (dir * -2 + 1); + } + *cmp += 2; + } + else if (!neg && **cmp == c) + { + return (1); + } + else if (neg && **cmp == c) + { + return (0); + } + return (-1); +} + +static int match_bracket(const char **pat, char c) +{ + char *cmp; + int neg; + int ret; + + cmp = (char *)*pat + 1; + while (**pat != ']') + { + if (!**pat) + return (0); + ++*pat; + } + neg = 0; + if ((*cmp == '^' || *cmp == '!') && ++neg) + ++cmp; + while (cmp < *pat) + { + ret = match_bracket_char(&cmp, *pat, c, neg); + if (ret != -1) + return (ret); + ++cmp; + } + return (neg); +} + +static int match_star(const char *pat, char *str, + char *full_word, t_ld **match) +{ + char *fix; + + if (!pat[1]) + return (1); + fix = str + ft_strlen(str); + while (fix > str) + { + if (match_pattern(pat + 1, fix, full_word, match)) + return (1); + --fix; + } + return (0); +} + +const char *manage_pat(const char *pat, char *str) +{ + if (pat[0] == '.' && pat[1] == '/' + && ((str[0] == '.' && str[1] != '/') || str[0] != '.')) + return (pat + 2); + return (pat); +} + +int match_pattern(const char *pat, char *str, + char *full_word, t_ld **match) +{ + pat = manage_pat(pat, str); + while (*pat) + { + if (*pat == '?') + str++; + else if (*pat == '[') + { + if (!match_bracket(&pat, *str)) + return (0); + } + else if (*pat == '*') + return (match_star(pat, str, full_word, match)); + else if (*pat == '\\') + { + if (!*++pat || *str != *pat) + return (0); + } + else if (*pat == '/' && !*str && is_directory(full_word)) + dir_research((pat + 1), full_word, match); + else if (*pat != *str) + return (0); + ++str; + ++pat; + } + return (*str ? 0 : 1); +} diff --git a/42sh/update_makefile.sh b/42sh/update_makefile.sh new file mode 100755 index 00000000..fca53410 --- /dev/null +++ b/42sh/update_makefile.sh @@ -0,0 +1,17 @@ +MYPATH=$(pwd) +CUR_MAKEFILE=$MYPATH/Makefile +if [ -e $CUR_MAKEFILE ] +then + echo "regenerate Makefile" + sed "`grep -n 'SRC_BASE =' $CUR_MAKEFILE | sed 's/:.*//'`, \$d" $CUR_MAKEFILE > NEWMAKEFILE + grep 'SRC_BASE =' $CUR_MAKEFILE >> NEWMAKEFILE + expr "$(find ./srcs | grep "\.c" | sed -e 's/srcs\///' -e 's/\.\///' -e 's/$/\\/')" : "\(.*\).$" >> NEWMAKEFILE + echo "" >> NEWMAKEFILE + grep 'SRCS =' $CUR_MAKEFILE >> NEWMAKEFILE + sed "1, `grep -n 'SRCS =' $CUR_MAKEFILE | sed 's/:.*//'`d" $CUR_MAKEFILE >> NEWMAKEFILE + mv $CUR_MAKEFILE ~/Documents/.OLDMakefile + mv NEWMAKEFILE $CUR_MAKEFILE + echo "Makefile done (copy still alive in ~/Documents/.OLDMakefile)" +else + echo "Makefile not found." +fi From c3c47e9a5abf98a8a91295a279a0e89ff52ed4c0 Mon Sep 17 00:00:00 2001 From: wescande Date: Tue, 24 Jan 2017 21:23:48 +0100 Subject: [PATCH 06/15] ajout du ** en mode tmp. Besoin de votre avis dessus. segfault sur la ligne de commande mais doi etre rebase pour savoir d'ou ca vient --- 42sh/includes/glob.h | 6 ++++-- 42sh/srcs/glob/dir_glob.c | 31 ++++++++++++++++++++++++++++++- 42sh/srcs/glob/match_pattern.c | 4 +++- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index 50038348..6b8d2475 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/24 19:27:53 by wescande ### ########.fr */ +/* Updated: 2017/01/24 21:22:58 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,8 +25,10 @@ typedef struct s_ld char **glob(const char *str, char **env); t_ld *expand_brace(const char *pat); void glob_print(t_list *token, t_data *data); -int match_pattern(const char *pat, char *str, char *full_word, t_ld **match); +int match_pattern(const char *pat, char *str, + char *full_word, t_ld **match); void dir_research(const char *pat, char *path, t_ld **match); +void dir_research_recursive(const char *pat, char *p, t_ld **match); bool is_directory(const char *path); /* diff --git a/42sh/srcs/glob/dir_glob.c b/42sh/srcs/glob/dir_glob.c index 6d8b0b27..c4bdb128 100644 --- a/42sh/srcs/glob/dir_glob.c +++ b/42sh/srcs/glob/dir_glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/24 19:10:52 by wescande ### ########.fr */ +/* Updated: 2017/01/24 21:16:42 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,3 +46,32 @@ void dir_research(const char *pat, char *p, t_ld **match) } } } + +void dir_research_recursive(const char *pat, char *p, t_ld **match) +{ + DIR *dir; + struct dirent *in; + char *path_tmp; + + if (ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.') + { + if (!(dir = opendir(p))) + return ; + while ((in = readdir(dir))) + { + if (ft_strcmp(in->d_name, ".") && ft_strcmp(in->d_name, "..")) + { + if (*p == '/' && !*(p + 1)) + path_tmp = ft_strjoin(p, in->d_name); + else + path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1); + if (is_directory(path_tmp)) + dir_research_recursive(pat, path_tmp, match); + if (match_pattern(pat, in->d_name, path_tmp, match)) + ft_ld_pushfront(match, ft_strdup(path_tmp + 2 * + (path_tmp[0] == '.' && path_tmp[1] == '/'))); + ft_strdel(&path_tmp); + } + } + } +} diff --git a/42sh/srcs/glob/match_pattern.c b/42sh/srcs/glob/match_pattern.c index 84b7c107..5e95b55b 100644 --- a/42sh/srcs/glob/match_pattern.c +++ b/42sh/srcs/glob/match_pattern.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/24 17:30:23 by wescande #+# #+# */ -/* Updated: 2017/01/24 20:42:30 by wescande ### ########.fr */ +/* Updated: 2017/01/24 20:58:47 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -72,6 +72,8 @@ static int match_star(const char *pat, char *str, { char *fix; + if (pat[1] == '*') + dir_research_recursive(pat, full_word, match); if (!pat[1]) return (1); fix = str + ft_strlen(str); From dfe40cff38a7056bddfcca91864691c9cd759ce1 Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 26 Jan 2017 16:32:04 +0100 Subject: [PATCH 07/15] nothing for rebase --- 42sh/srcs/glob/glob.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/42sh/srcs/glob/glob.c b/42sh/srcs/glob/glob.c index 59709902..6aa8b783 100644 --- a/42sh/srcs/glob/glob.c +++ b/42sh/srcs/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/24 20:42:45 by wescande ### ########.fr */ +/* Updated: 2017/01/26 16:04:09 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ /* ** glob return expansion of a string. -** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab}. +** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab, ac}, ** ** input parameters are : ** -char *pat -> pattern string to be looking for match ** -char **env -> env var. could be NULL From e886375f7ad803d8cac489f0299c6fcd544daa75 Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 26 Jan 2017 16:46:30 +0100 Subject: [PATCH 08/15] change dir name --- 42sh/{srcs => src}/builtin/builtin.c | 0 42sh/{srcs => src}/builtin/builtin_cd.c | 0 42sh/{srcs => src}/builtin/builtin_echo.c | 0 42sh/{srcs => src}/builtin/builtin_env.c | 0 42sh/{srcs => src}/builtin/builtin_exit.c | 0 42sh/{srcs => src}/builtin/builtin_setenv.c | 0 42sh/{srcs => src}/builtin/builtin_unsetenv.c | 0 42sh/{srcs => src}/exec/ast_free.c | 0 42sh/{srcs => src}/exec/exec_and_if.c | 0 42sh/{srcs => src}/exec/exec_command.c | 0 42sh/{srcs => src}/exec/exec_dgreat.c | 0 42sh/{srcs => src}/exec/exec_great.c | 0 42sh/{srcs => src}/exec/exec_less.c | 0 42sh/{srcs => src}/exec/exec_or_if.c | 0 42sh/{srcs => src}/exec/exec_pipe.c | 0 42sh/{srcs => src}/exec/exec_semi.c | 0 42sh/{srcs => src}/exec/fd_redirect.c | 0 42sh/{srcs => src}/exec/ft_cmd.c | 0 42sh/{srcs => src}/exec/ft_exec.c | 0 42sh/{srcs => src}/exec/ft_findexec.c | 0 42sh/{srcs => src}/exec/set_exitstatus.c | 0 42sh/{srcs => src}/glob/dir_glob.c | 0 42sh/{srcs => src}/glob/expand_brace.c | 0 42sh/{srcs => src}/glob/glob.c | 0 42sh/{srcs => src}/glob/glob_print.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_back.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_clear.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_del.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_front.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_new.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_order.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_pushback.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_pushfront.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_reverse.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_size.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_swap.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_ld_to_tab.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_strjoinf.c | 0 42sh/{srcs => src}/glob/lib_perso/ft_tabdel.c | 0 42sh/{srcs => src}/glob/match_pattern.c | 0 42sh/{srcs => src}/lexer/ft_tokenize.c | 0 42sh/{srcs => src}/lexer/lexer_backslash.c | 0 42sh/{srcs => src}/lexer/lexer_default.c | 0 42sh/{srcs => src}/lexer/lexer_delim.c | 0 42sh/{srcs => src}/lexer/lexer_dquote.c | 0 42sh/{srcs => src}/lexer/lexer_great.c | 0 42sh/{srcs => src}/lexer/lexer_greatand.c | 0 42sh/{srcs => src}/lexer/lexer_less.c | 0 42sh/{srcs => src}/lexer/lexer_lessand.c | 0 42sh/{srcs => src}/lexer/lexer_number.c | 0 42sh/{srcs => src}/lexer/lexer_quote.c | 0 42sh/{srcs => src}/lexer/lexer_sep.c | 0 42sh/{srcs => src}/lexer/lexer_word.c | 0 42sh/{srcs => src}/lexer/token_append.c | 0 42sh/{srcs => src}/lexer/token_cmp_type.c | 0 42sh/{srcs => src}/lexer/token_free.c | 0 42sh/{srcs => src}/lexer/token_init.c | 0 42sh/{srcs => src}/lexer/token_print.c | 0 42sh/{srcs => src}/line-editing/curs_ask.c | 0 42sh/{srcs => src}/line-editing/curs_clear.c | 0 42sh/{srcs => src}/line-editing/curs_goto.c | 0 42sh/{srcs => src}/line-editing/curs_move.c | 0 42sh/{srcs => src}/line-editing/curs_setup.c | 0 42sh/{srcs => src}/line-editing/curs_single.c | 0 42sh/{srcs => src}/line-editing/curs_term_setup.c | 0 42sh/{srcs => src}/line-editing/curs_write.c | 0 42sh/{srcs => src}/line-editing/ft_interactive_sh.c | 0 42sh/{srcs => src}/line-editing/ft_readline.c | 0 42sh/{srcs => src}/line-editing/rl_bitset.c | 0 42sh/{srcs => src}/line-editing/rl_clear_function.c | 0 42sh/{srcs => src}/line-editing/rl_clipboard_function.c | 0 42sh/{srcs => src}/line-editing/rl_clipboard_utility.c | 0 42sh/{srcs => src}/line-editing/rl_comp_function.c | 0 42sh/{srcs => src}/line-editing/rl_default_function.c | 0 42sh/{srcs => src}/line-editing/rl_display.c | 0 42sh/{srcs => src}/line-editing/rl_dynamic_buffer.c | 0 42sh/{srcs => src}/line-editing/rl_long_move_function.c | 0 42sh/{srcs => src}/line-editing/rl_merge_line.c | 0 42sh/{srcs => src}/line-editing/rl_page_move_function.c | 0 42sh/{srcs => src}/line-editing/rl_prompt.c | 0 42sh/{srcs => src}/line-editing/rl_quoting_function.c | 0 42sh/{srcs => src}/line-editing/rl_remove_function.c | 0 42sh/{srcs => src}/line-editing/rl_setup.c | 0 42sh/{srcs => src}/line-editing/rl_short_move_function.c | 0 42sh/{srcs => src}/line-editing/rl_stack_line.c | 0 42sh/{srcs => src}/line-editing/rl_state_function.c | 0 42sh/{srcs => src}/line-editing/rl_word_move_function.c | 0 42sh/{srcs => src}/line-editing/rl_word_utility.c | 0 42sh/{srcs => src}/main/data_exit.c | 0 42sh/{srcs => src}/main/data_init.c | 0 42sh/{srcs => src}/main/ft_cleanup.c | 0 42sh/{srcs => src}/main/ft_putast.c | 0 42sh/{srcs => src}/main/ft_putast2.c | 0 42sh/{srcs => src}/main/lib_expansion.c | 0 42sh/{srcs => src}/main/main.c | 0 42sh/{srcs => src}/main/sig_handler.c | 0 42sh/{srcs => src}/parser/ft_parse.c | 0 42sh/{srcs => src}/parser/parse_dgreat.c | 0 42sh/{srcs => src}/parser/parse_dless.c | 0 42sh/{srcs => src}/parser/parse_great.c | 0 42sh/{srcs => src}/parser/parse_greatand.c | 0 42sh/{srcs => src}/parser/parse_less.c | 0 42sh/{srcs => src}/parser/parse_lessand.c | 0 42sh/{srcs => src}/parser/parse_separator.c | 0 42sh/{srcs => src}/parser/parse_word.c | 0 105 files changed, 0 insertions(+), 0 deletions(-) rename 42sh/{srcs => src}/builtin/builtin.c (100%) rename 42sh/{srcs => src}/builtin/builtin_cd.c (100%) rename 42sh/{srcs => src}/builtin/builtin_echo.c (100%) rename 42sh/{srcs => src}/builtin/builtin_env.c (100%) rename 42sh/{srcs => src}/builtin/builtin_exit.c (100%) rename 42sh/{srcs => src}/builtin/builtin_setenv.c (100%) rename 42sh/{srcs => src}/builtin/builtin_unsetenv.c (100%) rename 42sh/{srcs => src}/exec/ast_free.c (100%) rename 42sh/{srcs => src}/exec/exec_and_if.c (100%) rename 42sh/{srcs => src}/exec/exec_command.c (100%) rename 42sh/{srcs => src}/exec/exec_dgreat.c (100%) rename 42sh/{srcs => src}/exec/exec_great.c (100%) rename 42sh/{srcs => src}/exec/exec_less.c (100%) rename 42sh/{srcs => src}/exec/exec_or_if.c (100%) rename 42sh/{srcs => src}/exec/exec_pipe.c (100%) rename 42sh/{srcs => src}/exec/exec_semi.c (100%) rename 42sh/{srcs => src}/exec/fd_redirect.c (100%) rename 42sh/{srcs => src}/exec/ft_cmd.c (100%) rename 42sh/{srcs => src}/exec/ft_exec.c (100%) rename 42sh/{srcs => src}/exec/ft_findexec.c (100%) rename 42sh/{srcs => src}/exec/set_exitstatus.c (100%) rename 42sh/{srcs => src}/glob/dir_glob.c (100%) rename 42sh/{srcs => src}/glob/expand_brace.c (100%) rename 42sh/{srcs => src}/glob/glob.c (100%) rename 42sh/{srcs => src}/glob/glob_print.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_back.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_clear.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_del.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_front.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_new.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_order.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_pushback.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_pushfront.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_reverse.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_size.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_swap.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_ld_to_tab.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_strjoinf.c (100%) rename 42sh/{srcs => src}/glob/lib_perso/ft_tabdel.c (100%) rename 42sh/{srcs => src}/glob/match_pattern.c (100%) rename 42sh/{srcs => src}/lexer/ft_tokenize.c (100%) rename 42sh/{srcs => src}/lexer/lexer_backslash.c (100%) rename 42sh/{srcs => src}/lexer/lexer_default.c (100%) rename 42sh/{srcs => src}/lexer/lexer_delim.c (100%) rename 42sh/{srcs => src}/lexer/lexer_dquote.c (100%) rename 42sh/{srcs => src}/lexer/lexer_great.c (100%) rename 42sh/{srcs => src}/lexer/lexer_greatand.c (100%) rename 42sh/{srcs => src}/lexer/lexer_less.c (100%) rename 42sh/{srcs => src}/lexer/lexer_lessand.c (100%) rename 42sh/{srcs => src}/lexer/lexer_number.c (100%) rename 42sh/{srcs => src}/lexer/lexer_quote.c (100%) rename 42sh/{srcs => src}/lexer/lexer_sep.c (100%) rename 42sh/{srcs => src}/lexer/lexer_word.c (100%) rename 42sh/{srcs => src}/lexer/token_append.c (100%) rename 42sh/{srcs => src}/lexer/token_cmp_type.c (100%) rename 42sh/{srcs => src}/lexer/token_free.c (100%) rename 42sh/{srcs => src}/lexer/token_init.c (100%) rename 42sh/{srcs => src}/lexer/token_print.c (100%) rename 42sh/{srcs => src}/line-editing/curs_ask.c (100%) rename 42sh/{srcs => src}/line-editing/curs_clear.c (100%) rename 42sh/{srcs => src}/line-editing/curs_goto.c (100%) rename 42sh/{srcs => src}/line-editing/curs_move.c (100%) rename 42sh/{srcs => src}/line-editing/curs_setup.c (100%) rename 42sh/{srcs => src}/line-editing/curs_single.c (100%) rename 42sh/{srcs => src}/line-editing/curs_term_setup.c (100%) rename 42sh/{srcs => src}/line-editing/curs_write.c (100%) rename 42sh/{srcs => src}/line-editing/ft_interactive_sh.c (100%) rename 42sh/{srcs => src}/line-editing/ft_readline.c (100%) rename 42sh/{srcs => src}/line-editing/rl_bitset.c (100%) rename 42sh/{srcs => src}/line-editing/rl_clear_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_clipboard_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_clipboard_utility.c (100%) rename 42sh/{srcs => src}/line-editing/rl_comp_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_default_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_display.c (100%) rename 42sh/{srcs => src}/line-editing/rl_dynamic_buffer.c (100%) rename 42sh/{srcs => src}/line-editing/rl_long_move_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_merge_line.c (100%) rename 42sh/{srcs => src}/line-editing/rl_page_move_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_prompt.c (100%) rename 42sh/{srcs => src}/line-editing/rl_quoting_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_remove_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_setup.c (100%) rename 42sh/{srcs => src}/line-editing/rl_short_move_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_stack_line.c (100%) rename 42sh/{srcs => src}/line-editing/rl_state_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_word_move_function.c (100%) rename 42sh/{srcs => src}/line-editing/rl_word_utility.c (100%) rename 42sh/{srcs => src}/main/data_exit.c (100%) rename 42sh/{srcs => src}/main/data_init.c (100%) rename 42sh/{srcs => src}/main/ft_cleanup.c (100%) rename 42sh/{srcs => src}/main/ft_putast.c (100%) rename 42sh/{srcs => src}/main/ft_putast2.c (100%) rename 42sh/{srcs => src}/main/lib_expansion.c (100%) rename 42sh/{srcs => src}/main/main.c (100%) rename 42sh/{srcs => src}/main/sig_handler.c (100%) rename 42sh/{srcs => src}/parser/ft_parse.c (100%) rename 42sh/{srcs => src}/parser/parse_dgreat.c (100%) rename 42sh/{srcs => src}/parser/parse_dless.c (100%) rename 42sh/{srcs => src}/parser/parse_great.c (100%) rename 42sh/{srcs => src}/parser/parse_greatand.c (100%) rename 42sh/{srcs => src}/parser/parse_less.c (100%) rename 42sh/{srcs => src}/parser/parse_lessand.c (100%) rename 42sh/{srcs => src}/parser/parse_separator.c (100%) rename 42sh/{srcs => src}/parser/parse_word.c (100%) diff --git a/42sh/srcs/builtin/builtin.c b/42sh/src/builtin/builtin.c similarity index 100% rename from 42sh/srcs/builtin/builtin.c rename to 42sh/src/builtin/builtin.c diff --git a/42sh/srcs/builtin/builtin_cd.c b/42sh/src/builtin/builtin_cd.c similarity index 100% rename from 42sh/srcs/builtin/builtin_cd.c rename to 42sh/src/builtin/builtin_cd.c diff --git a/42sh/srcs/builtin/builtin_echo.c b/42sh/src/builtin/builtin_echo.c similarity index 100% rename from 42sh/srcs/builtin/builtin_echo.c rename to 42sh/src/builtin/builtin_echo.c diff --git a/42sh/srcs/builtin/builtin_env.c b/42sh/src/builtin/builtin_env.c similarity index 100% rename from 42sh/srcs/builtin/builtin_env.c rename to 42sh/src/builtin/builtin_env.c diff --git a/42sh/srcs/builtin/builtin_exit.c b/42sh/src/builtin/builtin_exit.c similarity index 100% rename from 42sh/srcs/builtin/builtin_exit.c rename to 42sh/src/builtin/builtin_exit.c diff --git a/42sh/srcs/builtin/builtin_setenv.c b/42sh/src/builtin/builtin_setenv.c similarity index 100% rename from 42sh/srcs/builtin/builtin_setenv.c rename to 42sh/src/builtin/builtin_setenv.c diff --git a/42sh/srcs/builtin/builtin_unsetenv.c b/42sh/src/builtin/builtin_unsetenv.c similarity index 100% rename from 42sh/srcs/builtin/builtin_unsetenv.c rename to 42sh/src/builtin/builtin_unsetenv.c diff --git a/42sh/srcs/exec/ast_free.c b/42sh/src/exec/ast_free.c similarity index 100% rename from 42sh/srcs/exec/ast_free.c rename to 42sh/src/exec/ast_free.c diff --git a/42sh/srcs/exec/exec_and_if.c b/42sh/src/exec/exec_and_if.c similarity index 100% rename from 42sh/srcs/exec/exec_and_if.c rename to 42sh/src/exec/exec_and_if.c diff --git a/42sh/srcs/exec/exec_command.c b/42sh/src/exec/exec_command.c similarity index 100% rename from 42sh/srcs/exec/exec_command.c rename to 42sh/src/exec/exec_command.c diff --git a/42sh/srcs/exec/exec_dgreat.c b/42sh/src/exec/exec_dgreat.c similarity index 100% rename from 42sh/srcs/exec/exec_dgreat.c rename to 42sh/src/exec/exec_dgreat.c diff --git a/42sh/srcs/exec/exec_great.c b/42sh/src/exec/exec_great.c similarity index 100% rename from 42sh/srcs/exec/exec_great.c rename to 42sh/src/exec/exec_great.c diff --git a/42sh/srcs/exec/exec_less.c b/42sh/src/exec/exec_less.c similarity index 100% rename from 42sh/srcs/exec/exec_less.c rename to 42sh/src/exec/exec_less.c diff --git a/42sh/srcs/exec/exec_or_if.c b/42sh/src/exec/exec_or_if.c similarity index 100% rename from 42sh/srcs/exec/exec_or_if.c rename to 42sh/src/exec/exec_or_if.c diff --git a/42sh/srcs/exec/exec_pipe.c b/42sh/src/exec/exec_pipe.c similarity index 100% rename from 42sh/srcs/exec/exec_pipe.c rename to 42sh/src/exec/exec_pipe.c diff --git a/42sh/srcs/exec/exec_semi.c b/42sh/src/exec/exec_semi.c similarity index 100% rename from 42sh/srcs/exec/exec_semi.c rename to 42sh/src/exec/exec_semi.c diff --git a/42sh/srcs/exec/fd_redirect.c b/42sh/src/exec/fd_redirect.c similarity index 100% rename from 42sh/srcs/exec/fd_redirect.c rename to 42sh/src/exec/fd_redirect.c diff --git a/42sh/srcs/exec/ft_cmd.c b/42sh/src/exec/ft_cmd.c similarity index 100% rename from 42sh/srcs/exec/ft_cmd.c rename to 42sh/src/exec/ft_cmd.c diff --git a/42sh/srcs/exec/ft_exec.c b/42sh/src/exec/ft_exec.c similarity index 100% rename from 42sh/srcs/exec/ft_exec.c rename to 42sh/src/exec/ft_exec.c diff --git a/42sh/srcs/exec/ft_findexec.c b/42sh/src/exec/ft_findexec.c similarity index 100% rename from 42sh/srcs/exec/ft_findexec.c rename to 42sh/src/exec/ft_findexec.c diff --git a/42sh/srcs/exec/set_exitstatus.c b/42sh/src/exec/set_exitstatus.c similarity index 100% rename from 42sh/srcs/exec/set_exitstatus.c rename to 42sh/src/exec/set_exitstatus.c diff --git a/42sh/srcs/glob/dir_glob.c b/42sh/src/glob/dir_glob.c similarity index 100% rename from 42sh/srcs/glob/dir_glob.c rename to 42sh/src/glob/dir_glob.c diff --git a/42sh/srcs/glob/expand_brace.c b/42sh/src/glob/expand_brace.c similarity index 100% rename from 42sh/srcs/glob/expand_brace.c rename to 42sh/src/glob/expand_brace.c diff --git a/42sh/srcs/glob/glob.c b/42sh/src/glob/glob.c similarity index 100% rename from 42sh/srcs/glob/glob.c rename to 42sh/src/glob/glob.c diff --git a/42sh/srcs/glob/glob_print.c b/42sh/src/glob/glob_print.c similarity index 100% rename from 42sh/srcs/glob/glob_print.c rename to 42sh/src/glob/glob_print.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_back.c b/42sh/src/glob/lib_perso/ft_ld_back.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_back.c rename to 42sh/src/glob/lib_perso/ft_ld_back.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_clear.c b/42sh/src/glob/lib_perso/ft_ld_clear.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_clear.c rename to 42sh/src/glob/lib_perso/ft_ld_clear.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_del.c b/42sh/src/glob/lib_perso/ft_ld_del.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_del.c rename to 42sh/src/glob/lib_perso/ft_ld_del.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_front.c b/42sh/src/glob/lib_perso/ft_ld_front.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_front.c rename to 42sh/src/glob/lib_perso/ft_ld_front.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_new.c b/42sh/src/glob/lib_perso/ft_ld_new.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_new.c rename to 42sh/src/glob/lib_perso/ft_ld_new.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_order.c b/42sh/src/glob/lib_perso/ft_ld_order.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_order.c rename to 42sh/src/glob/lib_perso/ft_ld_order.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_pushback.c b/42sh/src/glob/lib_perso/ft_ld_pushback.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_pushback.c rename to 42sh/src/glob/lib_perso/ft_ld_pushback.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_pushfront.c b/42sh/src/glob/lib_perso/ft_ld_pushfront.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_pushfront.c rename to 42sh/src/glob/lib_perso/ft_ld_pushfront.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_reverse.c b/42sh/src/glob/lib_perso/ft_ld_reverse.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_reverse.c rename to 42sh/src/glob/lib_perso/ft_ld_reverse.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_size.c b/42sh/src/glob/lib_perso/ft_ld_size.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_size.c rename to 42sh/src/glob/lib_perso/ft_ld_size.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_swap.c b/42sh/src/glob/lib_perso/ft_ld_swap.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_swap.c rename to 42sh/src/glob/lib_perso/ft_ld_swap.c diff --git a/42sh/srcs/glob/lib_perso/ft_ld_to_tab.c b/42sh/src/glob/lib_perso/ft_ld_to_tab.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_ld_to_tab.c rename to 42sh/src/glob/lib_perso/ft_ld_to_tab.c diff --git a/42sh/srcs/glob/lib_perso/ft_strjoinf.c b/42sh/src/glob/lib_perso/ft_strjoinf.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_strjoinf.c rename to 42sh/src/glob/lib_perso/ft_strjoinf.c diff --git a/42sh/srcs/glob/lib_perso/ft_tabdel.c b/42sh/src/glob/lib_perso/ft_tabdel.c similarity index 100% rename from 42sh/srcs/glob/lib_perso/ft_tabdel.c rename to 42sh/src/glob/lib_perso/ft_tabdel.c diff --git a/42sh/srcs/glob/match_pattern.c b/42sh/src/glob/match_pattern.c similarity index 100% rename from 42sh/srcs/glob/match_pattern.c rename to 42sh/src/glob/match_pattern.c diff --git a/42sh/srcs/lexer/ft_tokenize.c b/42sh/src/lexer/ft_tokenize.c similarity index 100% rename from 42sh/srcs/lexer/ft_tokenize.c rename to 42sh/src/lexer/ft_tokenize.c diff --git a/42sh/srcs/lexer/lexer_backslash.c b/42sh/src/lexer/lexer_backslash.c similarity index 100% rename from 42sh/srcs/lexer/lexer_backslash.c rename to 42sh/src/lexer/lexer_backslash.c diff --git a/42sh/srcs/lexer/lexer_default.c b/42sh/src/lexer/lexer_default.c similarity index 100% rename from 42sh/srcs/lexer/lexer_default.c rename to 42sh/src/lexer/lexer_default.c diff --git a/42sh/srcs/lexer/lexer_delim.c b/42sh/src/lexer/lexer_delim.c similarity index 100% rename from 42sh/srcs/lexer/lexer_delim.c rename to 42sh/src/lexer/lexer_delim.c diff --git a/42sh/srcs/lexer/lexer_dquote.c b/42sh/src/lexer/lexer_dquote.c similarity index 100% rename from 42sh/srcs/lexer/lexer_dquote.c rename to 42sh/src/lexer/lexer_dquote.c diff --git a/42sh/srcs/lexer/lexer_great.c b/42sh/src/lexer/lexer_great.c similarity index 100% rename from 42sh/srcs/lexer/lexer_great.c rename to 42sh/src/lexer/lexer_great.c diff --git a/42sh/srcs/lexer/lexer_greatand.c b/42sh/src/lexer/lexer_greatand.c similarity index 100% rename from 42sh/srcs/lexer/lexer_greatand.c rename to 42sh/src/lexer/lexer_greatand.c diff --git a/42sh/srcs/lexer/lexer_less.c b/42sh/src/lexer/lexer_less.c similarity index 100% rename from 42sh/srcs/lexer/lexer_less.c rename to 42sh/src/lexer/lexer_less.c diff --git a/42sh/srcs/lexer/lexer_lessand.c b/42sh/src/lexer/lexer_lessand.c similarity index 100% rename from 42sh/srcs/lexer/lexer_lessand.c rename to 42sh/src/lexer/lexer_lessand.c diff --git a/42sh/srcs/lexer/lexer_number.c b/42sh/src/lexer/lexer_number.c similarity index 100% rename from 42sh/srcs/lexer/lexer_number.c rename to 42sh/src/lexer/lexer_number.c diff --git a/42sh/srcs/lexer/lexer_quote.c b/42sh/src/lexer/lexer_quote.c similarity index 100% rename from 42sh/srcs/lexer/lexer_quote.c rename to 42sh/src/lexer/lexer_quote.c diff --git a/42sh/srcs/lexer/lexer_sep.c b/42sh/src/lexer/lexer_sep.c similarity index 100% rename from 42sh/srcs/lexer/lexer_sep.c rename to 42sh/src/lexer/lexer_sep.c diff --git a/42sh/srcs/lexer/lexer_word.c b/42sh/src/lexer/lexer_word.c similarity index 100% rename from 42sh/srcs/lexer/lexer_word.c rename to 42sh/src/lexer/lexer_word.c diff --git a/42sh/srcs/lexer/token_append.c b/42sh/src/lexer/token_append.c similarity index 100% rename from 42sh/srcs/lexer/token_append.c rename to 42sh/src/lexer/token_append.c diff --git a/42sh/srcs/lexer/token_cmp_type.c b/42sh/src/lexer/token_cmp_type.c similarity index 100% rename from 42sh/srcs/lexer/token_cmp_type.c rename to 42sh/src/lexer/token_cmp_type.c diff --git a/42sh/srcs/lexer/token_free.c b/42sh/src/lexer/token_free.c similarity index 100% rename from 42sh/srcs/lexer/token_free.c rename to 42sh/src/lexer/token_free.c diff --git a/42sh/srcs/lexer/token_init.c b/42sh/src/lexer/token_init.c similarity index 100% rename from 42sh/srcs/lexer/token_init.c rename to 42sh/src/lexer/token_init.c diff --git a/42sh/srcs/lexer/token_print.c b/42sh/src/lexer/token_print.c similarity index 100% rename from 42sh/srcs/lexer/token_print.c rename to 42sh/src/lexer/token_print.c diff --git a/42sh/srcs/line-editing/curs_ask.c b/42sh/src/line-editing/curs_ask.c similarity index 100% rename from 42sh/srcs/line-editing/curs_ask.c rename to 42sh/src/line-editing/curs_ask.c diff --git a/42sh/srcs/line-editing/curs_clear.c b/42sh/src/line-editing/curs_clear.c similarity index 100% rename from 42sh/srcs/line-editing/curs_clear.c rename to 42sh/src/line-editing/curs_clear.c diff --git a/42sh/srcs/line-editing/curs_goto.c b/42sh/src/line-editing/curs_goto.c similarity index 100% rename from 42sh/srcs/line-editing/curs_goto.c rename to 42sh/src/line-editing/curs_goto.c diff --git a/42sh/srcs/line-editing/curs_move.c b/42sh/src/line-editing/curs_move.c similarity index 100% rename from 42sh/srcs/line-editing/curs_move.c rename to 42sh/src/line-editing/curs_move.c diff --git a/42sh/srcs/line-editing/curs_setup.c b/42sh/src/line-editing/curs_setup.c similarity index 100% rename from 42sh/srcs/line-editing/curs_setup.c rename to 42sh/src/line-editing/curs_setup.c diff --git a/42sh/srcs/line-editing/curs_single.c b/42sh/src/line-editing/curs_single.c similarity index 100% rename from 42sh/srcs/line-editing/curs_single.c rename to 42sh/src/line-editing/curs_single.c diff --git a/42sh/srcs/line-editing/curs_term_setup.c b/42sh/src/line-editing/curs_term_setup.c similarity index 100% rename from 42sh/srcs/line-editing/curs_term_setup.c rename to 42sh/src/line-editing/curs_term_setup.c diff --git a/42sh/srcs/line-editing/curs_write.c b/42sh/src/line-editing/curs_write.c similarity index 100% rename from 42sh/srcs/line-editing/curs_write.c rename to 42sh/src/line-editing/curs_write.c diff --git a/42sh/srcs/line-editing/ft_interactive_sh.c b/42sh/src/line-editing/ft_interactive_sh.c similarity index 100% rename from 42sh/srcs/line-editing/ft_interactive_sh.c rename to 42sh/src/line-editing/ft_interactive_sh.c diff --git a/42sh/srcs/line-editing/ft_readline.c b/42sh/src/line-editing/ft_readline.c similarity index 100% rename from 42sh/srcs/line-editing/ft_readline.c rename to 42sh/src/line-editing/ft_readline.c diff --git a/42sh/srcs/line-editing/rl_bitset.c b/42sh/src/line-editing/rl_bitset.c similarity index 100% rename from 42sh/srcs/line-editing/rl_bitset.c rename to 42sh/src/line-editing/rl_bitset.c diff --git a/42sh/srcs/line-editing/rl_clear_function.c b/42sh/src/line-editing/rl_clear_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_clear_function.c rename to 42sh/src/line-editing/rl_clear_function.c diff --git a/42sh/srcs/line-editing/rl_clipboard_function.c b/42sh/src/line-editing/rl_clipboard_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_clipboard_function.c rename to 42sh/src/line-editing/rl_clipboard_function.c diff --git a/42sh/srcs/line-editing/rl_clipboard_utility.c b/42sh/src/line-editing/rl_clipboard_utility.c similarity index 100% rename from 42sh/srcs/line-editing/rl_clipboard_utility.c rename to 42sh/src/line-editing/rl_clipboard_utility.c diff --git a/42sh/srcs/line-editing/rl_comp_function.c b/42sh/src/line-editing/rl_comp_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_comp_function.c rename to 42sh/src/line-editing/rl_comp_function.c diff --git a/42sh/srcs/line-editing/rl_default_function.c b/42sh/src/line-editing/rl_default_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_default_function.c rename to 42sh/src/line-editing/rl_default_function.c diff --git a/42sh/srcs/line-editing/rl_display.c b/42sh/src/line-editing/rl_display.c similarity index 100% rename from 42sh/srcs/line-editing/rl_display.c rename to 42sh/src/line-editing/rl_display.c diff --git a/42sh/srcs/line-editing/rl_dynamic_buffer.c b/42sh/src/line-editing/rl_dynamic_buffer.c similarity index 100% rename from 42sh/srcs/line-editing/rl_dynamic_buffer.c rename to 42sh/src/line-editing/rl_dynamic_buffer.c diff --git a/42sh/srcs/line-editing/rl_long_move_function.c b/42sh/src/line-editing/rl_long_move_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_long_move_function.c rename to 42sh/src/line-editing/rl_long_move_function.c diff --git a/42sh/srcs/line-editing/rl_merge_line.c b/42sh/src/line-editing/rl_merge_line.c similarity index 100% rename from 42sh/srcs/line-editing/rl_merge_line.c rename to 42sh/src/line-editing/rl_merge_line.c diff --git a/42sh/srcs/line-editing/rl_page_move_function.c b/42sh/src/line-editing/rl_page_move_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_page_move_function.c rename to 42sh/src/line-editing/rl_page_move_function.c diff --git a/42sh/srcs/line-editing/rl_prompt.c b/42sh/src/line-editing/rl_prompt.c similarity index 100% rename from 42sh/srcs/line-editing/rl_prompt.c rename to 42sh/src/line-editing/rl_prompt.c diff --git a/42sh/srcs/line-editing/rl_quoting_function.c b/42sh/src/line-editing/rl_quoting_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_quoting_function.c rename to 42sh/src/line-editing/rl_quoting_function.c diff --git a/42sh/srcs/line-editing/rl_remove_function.c b/42sh/src/line-editing/rl_remove_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_remove_function.c rename to 42sh/src/line-editing/rl_remove_function.c diff --git a/42sh/srcs/line-editing/rl_setup.c b/42sh/src/line-editing/rl_setup.c similarity index 100% rename from 42sh/srcs/line-editing/rl_setup.c rename to 42sh/src/line-editing/rl_setup.c diff --git a/42sh/srcs/line-editing/rl_short_move_function.c b/42sh/src/line-editing/rl_short_move_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_short_move_function.c rename to 42sh/src/line-editing/rl_short_move_function.c diff --git a/42sh/srcs/line-editing/rl_stack_line.c b/42sh/src/line-editing/rl_stack_line.c similarity index 100% rename from 42sh/srcs/line-editing/rl_stack_line.c rename to 42sh/src/line-editing/rl_stack_line.c diff --git a/42sh/srcs/line-editing/rl_state_function.c b/42sh/src/line-editing/rl_state_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_state_function.c rename to 42sh/src/line-editing/rl_state_function.c diff --git a/42sh/srcs/line-editing/rl_word_move_function.c b/42sh/src/line-editing/rl_word_move_function.c similarity index 100% rename from 42sh/srcs/line-editing/rl_word_move_function.c rename to 42sh/src/line-editing/rl_word_move_function.c diff --git a/42sh/srcs/line-editing/rl_word_utility.c b/42sh/src/line-editing/rl_word_utility.c similarity index 100% rename from 42sh/srcs/line-editing/rl_word_utility.c rename to 42sh/src/line-editing/rl_word_utility.c diff --git a/42sh/srcs/main/data_exit.c b/42sh/src/main/data_exit.c similarity index 100% rename from 42sh/srcs/main/data_exit.c rename to 42sh/src/main/data_exit.c diff --git a/42sh/srcs/main/data_init.c b/42sh/src/main/data_init.c similarity index 100% rename from 42sh/srcs/main/data_init.c rename to 42sh/src/main/data_init.c diff --git a/42sh/srcs/main/ft_cleanup.c b/42sh/src/main/ft_cleanup.c similarity index 100% rename from 42sh/srcs/main/ft_cleanup.c rename to 42sh/src/main/ft_cleanup.c diff --git a/42sh/srcs/main/ft_putast.c b/42sh/src/main/ft_putast.c similarity index 100% rename from 42sh/srcs/main/ft_putast.c rename to 42sh/src/main/ft_putast.c diff --git a/42sh/srcs/main/ft_putast2.c b/42sh/src/main/ft_putast2.c similarity index 100% rename from 42sh/srcs/main/ft_putast2.c rename to 42sh/src/main/ft_putast2.c diff --git a/42sh/srcs/main/lib_expansion.c b/42sh/src/main/lib_expansion.c similarity index 100% rename from 42sh/srcs/main/lib_expansion.c rename to 42sh/src/main/lib_expansion.c diff --git a/42sh/srcs/main/main.c b/42sh/src/main/main.c similarity index 100% rename from 42sh/srcs/main/main.c rename to 42sh/src/main/main.c diff --git a/42sh/srcs/main/sig_handler.c b/42sh/src/main/sig_handler.c similarity index 100% rename from 42sh/srcs/main/sig_handler.c rename to 42sh/src/main/sig_handler.c diff --git a/42sh/srcs/parser/ft_parse.c b/42sh/src/parser/ft_parse.c similarity index 100% rename from 42sh/srcs/parser/ft_parse.c rename to 42sh/src/parser/ft_parse.c diff --git a/42sh/srcs/parser/parse_dgreat.c b/42sh/src/parser/parse_dgreat.c similarity index 100% rename from 42sh/srcs/parser/parse_dgreat.c rename to 42sh/src/parser/parse_dgreat.c diff --git a/42sh/srcs/parser/parse_dless.c b/42sh/src/parser/parse_dless.c similarity index 100% rename from 42sh/srcs/parser/parse_dless.c rename to 42sh/src/parser/parse_dless.c diff --git a/42sh/srcs/parser/parse_great.c b/42sh/src/parser/parse_great.c similarity index 100% rename from 42sh/srcs/parser/parse_great.c rename to 42sh/src/parser/parse_great.c diff --git a/42sh/srcs/parser/parse_greatand.c b/42sh/src/parser/parse_greatand.c similarity index 100% rename from 42sh/srcs/parser/parse_greatand.c rename to 42sh/src/parser/parse_greatand.c diff --git a/42sh/srcs/parser/parse_less.c b/42sh/src/parser/parse_less.c similarity index 100% rename from 42sh/srcs/parser/parse_less.c rename to 42sh/src/parser/parse_less.c diff --git a/42sh/srcs/parser/parse_lessand.c b/42sh/src/parser/parse_lessand.c similarity index 100% rename from 42sh/srcs/parser/parse_lessand.c rename to 42sh/src/parser/parse_lessand.c diff --git a/42sh/srcs/parser/parse_separator.c b/42sh/src/parser/parse_separator.c similarity index 100% rename from 42sh/srcs/parser/parse_separator.c rename to 42sh/src/parser/parse_separator.c diff --git a/42sh/srcs/parser/parse_word.c b/42sh/src/parser/parse_word.c similarity index 100% rename from 42sh/srcs/parser/parse_word.c rename to 42sh/src/parser/parse_word.c From d857f74a864405a30efa03708116ffff363cbd7a Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 26 Jan 2017 16:47:25 +0100 Subject: [PATCH 09/15] some minor tricks --- 42sh/Makefile | 2 +- 42sh/update_makefile.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/42sh/Makefile b/42sh/Makefile index 351322b4..28f7dba9 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -117,7 +117,7 @@ LIBFT_INC = $(LIBFT_DIR)includes/ LIBS = -ltermcap -SRC_DIR = srcs/ +SRC_DIR = src/ INC_DIR = includes/ OBJ_DIR = objs/ diff --git a/42sh/update_makefile.sh b/42sh/update_makefile.sh index fca53410..a1b3228d 100755 --- a/42sh/update_makefile.sh +++ b/42sh/update_makefile.sh @@ -5,7 +5,7 @@ then echo "regenerate Makefile" sed "`grep -n 'SRC_BASE =' $CUR_MAKEFILE | sed 's/:.*//'`, \$d" $CUR_MAKEFILE > NEWMAKEFILE grep 'SRC_BASE =' $CUR_MAKEFILE >> NEWMAKEFILE - expr "$(find ./srcs | grep "\.c" | sed -e 's/srcs\///' -e 's/\.\///' -e 's/$/\\/')" : "\(.*\).$" >> NEWMAKEFILE + expr "$(find ./src | grep "\.c" | sed -e 's/src\///' -e 's/\.\///' -e 's/$/\\/')" : "\(.*\).$" >> NEWMAKEFILE echo "" >> NEWMAKEFILE grep 'SRCS =' $CUR_MAKEFILE >> NEWMAKEFILE sed "1, `grep -n 'SRCS =' $CUR_MAKEFILE | sed 's/:.*//'`d" $CUR_MAKEFILE >> NEWMAKEFILE From a0feff2e2af210449c865cab28b7fd09a43b4a87 Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 26 Jan 2017 16:59:41 +0100 Subject: [PATCH 10/15] clean after rebase --- 42sh/Makefile | 57 ++++++++++++++++++-- 42sh/src/builtin/builtin.c | 51 ------------------ 42sh/src/exec/fd_redirect.c | 27 ---------- 42sh/src/exec/ft_cmd.c | 65 ----------------------- 42sh/src/line-editing/ft_interactive_sh.c | 26 --------- 42sh/src/main/main.c | 22 +------- 6 files changed, 55 insertions(+), 193 deletions(-) delete mode 100644 42sh/src/builtin/builtin.c delete mode 100644 42sh/src/exec/fd_redirect.c delete mode 100644 42sh/src/exec/ft_cmd.c delete mode 100644 42sh/src/line-editing/ft_interactive_sh.c diff --git a/42sh/Makefile b/42sh/Makefile index 28f7dba9..2a215af7 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -122,14 +122,15 @@ INC_DIR = includes/ OBJ_DIR = objs/ SRC_BASE = \ -builtin/builtin.c\ builtin/builtin_cd.c\ builtin/builtin_echo.c\ builtin/builtin_env.c\ builtin/builtin_exit.c\ builtin/builtin_setenv.c\ builtin/builtin_unsetenv.c\ +builtin/is_builtin.c\ exec/ast_free.c\ +exec/exec_ampersand.c\ exec/exec_and_if.c\ exec/exec_command.c\ exec/exec_dgreat.c\ @@ -138,10 +139,13 @@ exec/exec_less.c\ exec/exec_or_if.c\ exec/exec_pipe.c\ exec/exec_semi.c\ -exec/fd_redirect.c\ -exec/ft_cmd.c\ exec/ft_exec.c\ exec/ft_findexec.c\ +exec/launch_process.c\ +exec/process_redirect.c\ +exec/process_reset.c\ +exec/process_setexec.c\ +exec/process_setgroup.c\ exec/set_exitstatus.c\ glob/dir_glob.c\ glob/expand_brace.c\ @@ -162,7 +166,42 @@ glob/lib_perso/ft_ld_to_tab.c\ glob/lib_perso/ft_strjoinf.c\ glob/lib_perso/ft_tabdel.c\ glob/match_pattern.c\ +job-control/builtin_bg.c\ +job-control/builtin_fg.c\ +job-control/builtin_jobs.c\ +job-control/do_job_notification.c\ +job-control/job_addprocess.c\ +job-control/job_cmp_id.c\ +job-control/job_format.c\ +job-control/job_format_head.c\ +job-control/job_free.c\ +job-control/job_getprocess.c\ +job-control/job_getrank.c\ +job-control/job_is_completed.c\ +job-control/job_is_stopped.c\ +job-control/job_kill_all.c\ +job-control/job_notify_change.c\ +job-control/job_notify_new.c\ +job-control/job_remove.c\ +job-control/job_update_id.c\ +job-control/job_update_status.c\ +job-control/job_wait.c\ +job-control/mark_job_as_running.c\ +job-control/process_cmp_pid.c\ +job-control/process_format.c\ +job-control/process_free.c\ +job-control/process_mark_status.c\ +job-control/put_job_in_background.c\ +job-control/put_job_in_foreground.c\ +job-control/sigchld_handler.c\ +job-control/sigint_handler.c\ +job-control/sigtstp_handler.c\ +job-control/sigttin_handler.c\ +job-control/sigttou_handler.c\ +lexer/command_getoutput.c\ +lexer/ft_post_tokenize.c\ lexer/ft_tokenize.c\ +lexer/get_lexer_state.c\ lexer/lexer_backslash.c\ lexer/lexer_default.c\ lexer/lexer_delim.c\ @@ -174,9 +213,14 @@ lexer/lexer_lessand.c\ lexer/lexer_number.c\ lexer/lexer_quote.c\ lexer/lexer_sep.c\ +lexer/lexer_special.c\ +lexer/lexer_var.c\ lexer/lexer_word.c\ +lexer/reduce_bquotes.c\ +lexer/reduce_parens.c\ lexer/token_append.c\ lexer/token_cmp_type.c\ +lexer/token_expand_var.c\ lexer/token_free.c\ lexer/token_init.c\ lexer/token_print.c\ @@ -188,7 +232,6 @@ line-editing/curs_setup.c\ line-editing/curs_single.c\ line-editing/curs_term_setup.c\ line-editing/curs_write.c\ -line-editing/ft_interactive_sh.c\ line-editing/ft_readline.c\ line-editing/rl_bitset.c\ line-editing/rl_clear_function.c\ @@ -212,11 +255,16 @@ line-editing/rl_word_move_function.c\ line-editing/rl_word_utility.c\ main/data_exit.c\ main/data_init.c\ +main/data_singleton.c\ main/ft_cleanup.c\ main/ft_putast.c\ main/ft_putast2.c\ main/lib_expansion.c\ main/main.c\ +main/shell_exit.c\ +main/shell_get_avdata.c\ +main/shell_get_opts.c\ +main/shell_init.c\ main/sig_handler.c\ parser/ft_parse.c\ parser/parse_dgreat.c\ @@ -226,6 +274,7 @@ parser/parse_greatand.c\ parser/parse_less.c\ parser/parse_lessand.c\ parser/parse_separator.c\ +parser/parse_subshell.c\ parser/parse_word.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) diff --git a/42sh/src/builtin/builtin.c b/42sh/src/builtin/builtin.c deleted file mode 100644 index 1966a63e..00000000 --- a/42sh/src/builtin/builtin.c +++ /dev/null @@ -1,51 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* builtin.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/11/28 14:21:34 by jhalford #+# #+# */ -/* Updated: 2016/12/03 15:17:21 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -t_stof g_builtin[] = { - {"echo", &builtin_echo}, - {"cd", &builtin_cd}, - {"setenv", &builtin_setenv}, - {"unsetenv", &builtin_unsetenv}, - {"env", &builtin_env}, - {"exit", &builtin_exit}, - {NULL, NULL}, -}; - -int ft_builtin(char **av, t_data *data) -{ - int i; - int ret; - - i = -1; - while (g_builtin[++i].name) - if (ft_strcmp(g_builtin[i].name, *av) == 0) - { - if (data->exec.fdout != STDOUT) - { - if (fork() == 0) - { - fd_redirect(data); - ret = (g_builtin[i].f)(av, data); - exit(ret); - } - } - else - { - ret = (g_builtin[i].f)(av, data); - set_exitstatus(data, ret); - } - return (1); - } - return (0); -} diff --git a/42sh/src/exec/fd_redirect.c b/42sh/src/exec/fd_redirect.c deleted file mode 100644 index 6c1d8c47..00000000 --- a/42sh/src/exec/fd_redirect.c +++ /dev/null @@ -1,27 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_redirect.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/11/29 16:04:18 by jhalford #+# #+# */ -/* Updated: 2016/12/03 15:24:08 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -void fd_redirect(t_data *data) -{ - if (data->exec.fdin != STDIN) - { - dup2(data->exec.fdin, STDIN); - close(data->exec.fdin); - } - if (data->exec.fdout != STDOUT) - { - dup2(data->exec.fdout, STDOUT); - close(data->exec.fdout); - } -} diff --git a/42sh/src/exec/ft_cmd.c b/42sh/src/exec/ft_cmd.c deleted file mode 100644 index adb9d6db..00000000 --- a/42sh/src/exec/ft_cmd.c +++ /dev/null @@ -1,65 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_cmd.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: jhalford +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/11/27 21:13:18 by jhalford #+# #+# */ -/* Updated: 2016/12/09 21:50:26 by jhalford ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "minishell.h" - -extern pid_t g_pid; - -int ft_cmd_process(char **argv, t_data *data) -{ - char *execpath; - - ft_expand_dollar(argv, data->env); - if (ft_builtin(argv, data)) - return (0); - else if (ft_strchr(argv[0], '/')) - execpath = argv[0]; - else if (!(execpath = ft_findexec(ft_getenv(data->env, "PATH"), argv[0]))) - { - ft_dprintf(2, "%s: command not found: %s\n", SHELL_NAME, argv[0]); - set_exitstatus(data, 127); - return (-1); - } - return (ft_cmd_exec(execpath, argv, data)); -} - -int ft_cmd_exec(char *execpath, char **argv, t_data *data) -{ - pid_t pid; - int status; - - if (access(execpath, X_OK) == -1) - { - ft_dprintf(2, "%s: permission denied: %s\n", SHELL_NAME, argv[0]); - ft_strdel(&execpath); - return (-1); - } - if ((pid = fork()) == -1) - return (-1); - else if (pid == 0) - { - fd_redirect(data); - execve(execpath, argv, data->env); - } - else - { - ft_strdel(&execpath); - g_pid = pid; - if (data->exec.fdout == STDOUT) - { - waitpid(pid, &status, 0); - set_exitstatus(data, status); - } - g_pid = 0; - } - return (0); -} diff --git a/42sh/src/line-editing/ft_interactive_sh.c b/42sh/src/line-editing/ft_interactive_sh.c deleted file mode 100644 index 5110f44b..00000000 --- a/42sh/src/line-editing/ft_interactive_sh.c +++ /dev/null @@ -1,26 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* interactive_sh.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: sbenning +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2016/12/10 09:44:43 by sbenning #+# #+# */ -/* Updated: 2016/12/10 10:24:12 by sbenning ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "line_editing.h" - -t_data **data_singleton(void) -{ - static t_data *data; - - return (&data); -} - -int ft_interactive_sh(t_data *data) -{ - *data_singleton() = data; - return (ft_readline(&data->line)); -} diff --git a/42sh/src/main/main.c b/42sh/src/main/main.c index 0228f689..58cec719 100644 --- a/42sh/src/main/main.c +++ b/42sh/src/main/main.c @@ -6,11 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/06 18:40:58 by jhalford #+# #+# */ -<<<<<<< HEAD:src/main/main.c -/* Updated: 2017/01/12 14:02:30 by jhalford ### ########.fr */ -======= -/* Updated: 2017/01/05 16:07:09 by wescande ### ########.fr */ ->>>>>>> premier commit. working. . .:srcs/main/main.c +/* Updated: 2017/01/26 16:54:26 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -30,11 +26,11 @@ int shell_single_command(char *command) return (1); if (!token) return (0); - token_print(token); if (ft_post_tokenize(&token, command)) return (1); DG("after post_tokenize"); token_print(token); + glob_print(token, data_singleton()); if (ft_parse(&ast, &token)) return (1); /* btree_print(STDBUG, ast, &ft_putast); */ @@ -56,21 +52,7 @@ int main(int ac, char **av) } while (1) { -<<<<<<< HEAD:src/main/main.c if (ft_readline()) -======= - if (ft_interactive_sh(&data)) - return (1); - DG("{inv}{mag}got command '%s'", data.line.input); - token = NULL; - if (ft_tokenize(&token, data.line.input, DEFAULT)) - return (1); - if (!token) - continue ; -// token_print(token); - glob_print(token, &data); - if (ft_parse(&ast, &token)) ->>>>>>> premier commit. working. . .:srcs/main/main.c return (1); if (shell_single_command(data_singleton()->line.input)) return (1); From d66a692f8e8cb4a482f95f1f6c295f94660d699b Mon Sep 17 00:00:00 2001 From: wescande Date: Thu, 26 Jan 2017 17:21:13 +0100 Subject: [PATCH 11/15] modif print on DBG 3 et modif glob sur recherche dans le path seulement si =/= '/' et =/= './' --- 42sh/src/glob/glob.c | 7 +++++-- 42sh/src/glob/glob_print.c | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/42sh/src/glob/glob.c b/42sh/src/glob/glob.c index 6aa8b783..320b15eb 100644 --- a/42sh/src/glob/glob.c +++ b/42sh/src/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/26 16:04:09 by wescande ### ########.fr */ +/* Updated: 2017/01/26 17:18:20 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -52,7 +52,10 @@ char **glob(const char *pat, char **env) mul_pat = expand_brace(pat); while (mul_pat->next) { - if (env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) + if (!(((char *)mul_pat->content)[0] == '/' + || (((char *)mul_pat->content)[0] == '.' + && ((char *)mul_pat->content)[1] == '/')) + && env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) { path_research(mul_pat->content, path, &match); ft_tabdel(&path); diff --git a/42sh/src/glob/glob_print.c b/42sh/src/glob/glob_print.c index 828089a5..38a8bdc0 100644 --- a/42sh/src/glob/glob_print.c +++ b/42sh/src/glob/glob_print.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/05 16:09:40 by wescande #+# #+# */ -/* Updated: 2017/01/12 15:48:03 by wescande ### ########.fr */ +/* Updated: 2017/01/26 17:14:32 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -42,7 +42,7 @@ void glob_print(t_list *lst, t_data *data) ; glob_ret = glob(token->data, data->env); DG("%02i '%s'", i, token->data); - ft_tabprint_fd(glob_ret, 2); + ft_tabprint_fd(glob_ret, 3); lst = lst->next; } } From 26625dd1b18933ce966ca28b1e2cf1dcec96006d Mon Sep 17 00:00:00 2001 From: Jack Halford Date: Thu, 26 Jan 2017 19:39:39 +0100 Subject: [PATCH 12/15] commit pour cleanup la merde de wescande sur git........ --- 42sh/Makefile | 93 --------------------------------------- 42sh/includes/minishell.h | 9 +--- 2 files changed, 1 insertion(+), 101 deletions(-) diff --git a/42sh/Makefile b/42sh/Makefile index 2a215af7..9bfbaf2d 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -1,95 +1,3 @@ -<<<<<<< HEAD -NAME = minishell -CC = gcc -TAGFILE = .tags - -D_SRC = src -F_SRC := $(shell find $(D_SRC) -type f -regex ".*\.c$$") - -D_OBJ = obj -F_OBJ = $(notdir $(F_SRC:.c=.o)) -DF_OBJ := $(addprefix $(D_OBJ)/, $(F_OBJ)) - -D_INC = includes libft/includes -F_INC := $(shell find $(D_INC) -type f -regex ".*\.h$$") -O_INC = $(addprefix -I, $(D_INC)) - -D_SER = libft/ -O_SER = $(addprefix -L, $(D_SER)) - -D_LIB = ft ncurses -O_LIB = $(addprefix -l, $(D_LIB)) - -W_FLAGS = -Wall -Wextra -Werror -D_FLAGS = -g - -MKDIR = mkdir -p -RM = /bin/rm -rf - -.PHONY: all clean fclean re - -all: $(NAME) - -$(NAME): libft/libft.a $(DF_OBJ) - $(CC) $(O_INC) $(O_SER) $(O_LIB) $(W_FLAGS) $(DF_OBJ) -o $@ $(D_FLAGS) - -$(D_OBJ)/%.o: $(D_SRC)/main/%.c includes/minishell.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/builtin/%.c includes/minishell.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/minishell-exec/%.c includes/minishell.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/line-editing/%.c includes/ft_readline.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/lexer/%.c includes/lexer.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/parser/%.c includes/parser.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/exec/%.c includes/exec.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -$(D_OBJ)/%.o: $(D_SRC)/job-control/%.c includes/job_control.h - @$(MKDIR) $(D_OBJ) - @$(CC) $(O_INC) $(W_FLAGS) -c $< -o $@ $(D_FLAGS) - @echo "Compiling "$<"..." - -libft/libft.a: libft/src/*/*.c - @echo "libft/libft.a" - @$(MAKE) -C libft 2>/dev/null - -libft: - @echo "libft" - @$(MAKE) -C libft 2>/dev/null - -clean: - $(RM) $(D_OBJ) - -fclean: clean - $(RM) $(NAME) - @$(MAKE) fclean -C libft/ 2>/dev/null - -re: fclean all -======= #* ************************************************************************** *# #* *# #* ::: :::::::: *# @@ -325,4 +233,3 @@ relib: fcleanlib $(LIBFT_LIB) .PHONY : fclean clean re relib cleanlib fcleanlib -include $(OBJS:.o=.d) ->>>>>>> premier commit. working. . . diff --git a/42sh/includes/minishell.h b/42sh/includes/minishell.h index 108ea05b..25815f39 100644 --- a/42sh/includes/minishell.h +++ b/42sh/includes/minishell.h @@ -6,11 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 13:07:44 by jhalford #+# #+# */ -<<<<<<< HEAD -/* Updated: 2017/01/11 17:17:16 by jhalford ### ########.fr */ -======= -/* Updated: 2017/01/05 14:24:14 by wescande ### ########.fr */ ->>>>>>> premier commit. working. . . +/* Updated: 2017/01/26 19:39:10 by jhalford ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,12 +21,9 @@ # include "parser.h" # include "ft_readline.h" # include "exec.h" -<<<<<<< HEAD # include "builtin.h" # include "job_control.h" -======= # include "glob.h" ->>>>>>> premier commit. working. . . # include # include From 45bc317f97439c9b6dc2a59a494d306f2244a28a Mon Sep 17 00:00:00 2001 From: wescande Date: Fri, 27 Jan 2017 20:13:13 +0100 Subject: [PATCH 13/15] working on esc character in token --- 42sh/includes/glob.h | 25 +++++++---- 42sh/includes/lexer.h | 5 ++- 42sh/src/glob/dir_glob.c | 18 ++++---- 42sh/src/glob/expand_brace.c | 70 +++++++++++++++++++++++-------- 42sh/src/glob/glob.c | 64 +++++++++++++++++++--------- 42sh/src/glob/glob_print.c | 19 ++++++++- 42sh/src/glob/is_char_esc.c | 23 ++++++++++ 42sh/src/lexer/ft_tokenize.c | 2 +- 42sh/src/lexer/lexer_backslash.c | 4 +- 42sh/src/lexer/lexer_default.c | 4 +- 42sh/src/lexer/lexer_dquote.c | 6 +-- 42sh/src/lexer/lexer_great.c | 8 ++-- 42sh/src/lexer/lexer_greatand.c | 6 +-- 42sh/src/lexer/lexer_less.c | 8 ++-- 42sh/src/lexer/lexer_lessand.c | 6 +-- 42sh/src/lexer/lexer_number.c | 4 +- 42sh/src/lexer/lexer_quote.c | 4 +- 42sh/src/lexer/lexer_var.c | 6 +-- 42sh/src/lexer/lexer_word.c | 4 +- 42sh/src/lexer/token_append.c | 17 +++++--- 42sh/src/lexer/token_expand_var.c | 4 +- 42sh/src/lexer/token_free.c | 5 ++- 42sh/src/lexer/token_init.c | 7 ++-- 42sh/src/lexer/token_print.c | 7 +++- 24 files changed, 224 insertions(+), 102 deletions(-) create mode 100644 42sh/src/glob/is_char_esc.c diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index 6b8d2475..943ab15a 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/24 21:22:58 by wescande ### ########.fr */ +/* Updated: 2017/01/27 19:13:15 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,14 +22,23 @@ typedef struct s_ld struct s_ld *prev; } t_ld; -char **glob(const char *str, char **env); -t_ld *expand_brace(const char *pat); +typedef struct s_glob +{ + const char *pat; + const char *esc; + t_ld *match; + t_ld *m_pat; +} t_glob; + +char **glob(const char *str, const char *esc, char **env); +void expand_brace(t_glob *tglob); void glob_print(t_list *token, t_data *data); -int match_pattern(const char *pat, char *str, - char *full_word, t_ld **match); -void dir_research(const char *pat, char *path, t_ld **match); -void dir_research_recursive(const char *pat, char *p, t_ld **match); -bool is_directory(const char *path); +int match_pattern(t_glob *tglob, char *str, char *full_word); +void dir_research(t_glob *tglob, char *path); +void dir_research_recursive(t_glob *tglob, char *p); +int is_directory(const char *path); + +int is_char_esc(const char *esc, const char *ini_str, const char *str_pos); /* ** LIST D: diff --git a/42sh/includes/lexer.h b/42sh/includes/lexer.h index 03276719..e1dcf24f 100644 --- a/42sh/includes/lexer.h +++ b/42sh/includes/lexer.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */ -/* Updated: 2017/01/12 14:57:41 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:52:11 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -63,6 +63,7 @@ struct s_token { t_type type; char *data; + char *esc; int size; }; @@ -75,7 +76,7 @@ extern int (*g_lexer[])(t_list **alst, char *str); t_token *token_init(); int ft_tokenize(t_list **alst, char *str, t_lexstate state); int ft_post_tokenize(t_list **alst, char *str); -int token_append(t_token *token, char c); +int token_append(t_token *token, char c, short int esc); void token_free(void *data, size_t size); int token_cmp_type(t_token *token, t_type *ref); void token_print(t_list *lst); diff --git a/42sh/src/glob/dir_glob.c b/42sh/src/glob/dir_glob.c index c4bdb128..804c9465 100644 --- a/42sh/src/glob/dir_glob.c +++ b/42sh/src/glob/dir_glob.c @@ -6,13 +6,13 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/24 21:16:42 by wescande ### ########.fr */ +/* Updated: 2017/01/27 18:32:54 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ #include "glob.h" -bool is_directory(const char *path) +int is_directory(const char *path) { struct stat path_stat; @@ -20,7 +20,7 @@ bool is_directory(const char *path) return (S_ISDIR(path_stat.st_mode)); } -void dir_research(const char *pat, char *p, t_ld **match) +void dir_research(t_glob *gl, char *p) { DIR *dir; struct dirent *in; @@ -38,8 +38,8 @@ void dir_research(const char *pat, char *p, t_ld **match) path_tmp = ft_strjoin(p, in->d_name); else path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1); - if (match_pattern(pat, in->d_name, path_tmp, match)) - ft_ld_pushfront(match, ft_strdup(path_tmp + 2 * + if (match_pattern(gl, in->d_name, path_tmp)) + ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 * (path_tmp[0] == '.' && path_tmp[1] == '/'))); ft_strdel(&path_tmp); } @@ -47,7 +47,7 @@ void dir_research(const char *pat, char *p, t_ld **match) } } -void dir_research_recursive(const char *pat, char *p, t_ld **match) +void dir_research_recursive(t_glob *gl, char *p) { DIR *dir; struct dirent *in; @@ -66,9 +66,9 @@ void dir_research_recursive(const char *pat, char *p, t_ld **match) else path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1); if (is_directory(path_tmp)) - dir_research_recursive(pat, path_tmp, match); - if (match_pattern(pat, in->d_name, path_tmp, match)) - ft_ld_pushfront(match, ft_strdup(path_tmp + 2 * + dir_research_recursive(gl, path_tmp); + if (match_pattern(gl, in->d_name, path_tmp)) + ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 * (path_tmp[0] == '.' && path_tmp[1] == '/'))); ft_strdel(&path_tmp); } diff --git a/42sh/src/glob/expand_brace.c b/42sh/src/glob/expand_brace.c index 501b7ac9..8db42a27 100644 --- a/42sh/src/glob/expand_brace.c +++ b/42sh/src/glob/expand_brace.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/12 19:00:29 by wescande #+# #+# */ -/* Updated: 2017/01/24 19:15:35 by wescande ### ########.fr */ +/* Updated: 2017/01/27 20:12:12 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,43 @@ ** -char *pat -> pattern string to be looking for expand */ -static int search_brace(t_ld **wk, char *str, int index) +static char **generate_tab(const char *pat, const char *esc, int dup) +{ + char **my_tab; + + if (!(my_tab = (char **)malloc(sizeof(char*) * 3))) + return (NULL); + if (dup) + { + my_tab[0] = ft_strdup(pat); + my_tab[1] = ft_strdup(esc); + } + else + { + my_tab[0] = (char *)pat; + my_tab[1] = (char *)esc; + } + my_tab[2] = NULL; + return (my_tab); +} + +static char *calc_expand_esc(const char *esc, + int nb_start, int nb_middle, int nb_end) +{ + char *new_esc; + int index; + + new_esc = ft_memalloc(sizeof(char) * (nb_start + nb_middle + nb_end) / 8); + index = -1; + while (++index < nb_start) + new_esc[index / 8] |= (esc[index / 8] >> index % 8) & 1 << index % 8; + //copy the nb_start first bit of esc. + //append nb_middle bit at status 0 + //append nb_end last bit from end of esc. + return (new_esc); +} + +static int search_brace(t_ld **wk, char *str, char *esc, int index) { char *start; char *s1; @@ -29,17 +65,17 @@ static int search_brace(t_ld **wk, char *str, int index) start = NULL; while (*str) { - if (*str == '{') - start = str; - else if (*str == '}' && start) + start = *str == '{' ? str : start; + if (*str == '}' && start) { s1 = ft_strsub(start, 1, str - start - 1); split = ft_strsplit(s1, ','); ft_strdel(&s1); s1 = ft_strsub((*wk)->content, 0, start - (char *)(*wk)->content); while (split[++index]) - ft_ld_pushfront(wk, ft_strjoinf(ft_strjoin(s1, split[index]), - str + 1, 1)); + ft_ld_pushfront(wk, generate_tab(ft_strjoinf(ft_strjoin(s1, + split[index]), str + 1, 1), calc_expand_esc(esc, + ft_strlen(s1), ft_strlen(split[index]), ft_strlen(str +1)), 0)); ft_strdel(&s1); ft_tabdel(&split); return (1); @@ -49,29 +85,27 @@ static int search_brace(t_ld **wk, char *str, int index) return (0); } -t_ld *expand_brace(const char *pat) +void expand_brace(t_glob *gl) { - t_ld *ret; t_ld *tmp; int do_it; - ret = NULL; - ft_ld_pushfront(&ret, ft_strdup("")); - ft_ld_pushfront(&ret, ft_strdup(pat)); + ft_ld_pushfront(&gl->m_pat, generate_tab("", "", 1)); + ft_ld_pushfront(&gl->m_pat, generate_tab(gl->pat, gl->esc, 1)); do_it = 1; while (do_it) { do_it = 0; - while (ret->next) + while (gl->m_pat->next) { - if ((tmp = ret) && search_brace(&ret, ret->content, -1)) + if ((tmp = gl->m_pat) && search_brace(&gl->m_pat, + ((char **)gl->m_pat->content)[0],((char **)gl->m_pat->content)[1], -1)) { - ft_ld_del(&tmp, &ft_strdel); + ft_ld_del(&tmp, &ft_tabdel); do_it = 1; } - ret = ret->next; + gl->m_pat = gl->m_pat->next; } - ret = ft_ld_front(ret); + gl->m_pat = ft_ld_front(gl->m_pat); } - return (ret); } diff --git a/42sh/src/glob/glob.c b/42sh/src/glob/glob.c index 320b15eb..de095b22 100644 --- a/42sh/src/glob/glob.c +++ b/42sh/src/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/26 17:18:20 by wescande ### ########.fr */ +/* Updated: 2017/01/27 19:05:38 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,13 +21,13 @@ ** to just expanse in local directory and not in path */ -static void path_research(const char *pat, char **path, t_ld **match) +static void path_research(t_glob *tglob, char **path) { int i; i = -1; while (path[++i]) - dir_research(pat, path[i], match); + dir_research(tglob, path[i]); } static char **treat_glob(t_ld **match) @@ -42,30 +42,54 @@ static char **treat_glob(t_ld **match) return (gl); } -char **glob(const char *pat, char **env) +static void add_simple_pat(t_glob *gl) { - t_ld *match; - char **path; - t_ld *mul_pat; + char *str; + int start; - match = NULL; - mul_pat = expand_brace(pat); - while (mul_pat->next) + str = ((char **)gl->m_pat->content)[0]; + start = 0; + while (*str) { - if (!(((char *)mul_pat->content)[0] == '/' - || (((char *)mul_pat->content)[0] == '.' - && ((char *)mul_pat->content)[1] == '/')) + if (!is_char_esc(((char **)gl->m_pat->content)[1], + ((char **)gl->m_pat->content)[0], str)) + { + if (*str == '[') + start = 1; + else if (*str == ']' && start == 1) + return ; + else if (*str == '*' || *str == '?') + return ; + } + ++str; + } + ft_ld_pushfront(&gl->match, ((char **)gl->m_pat->content)[0]); +} + +char **glob(const char *pat, const char *esc, char **env) +{ + t_glob tglob; + char **path; + + tglob = (t_glob){pat, esc, NULL, NULL}; + expand_brace(&tglob, tglob.pat); + while (tglob.m_pat->next) + { + add_simple_pat(&tglob); + if (!(((char **)tglob.m_pat->content)[0][0] == '/' + || (((char **)tglob.m_pat->content)[0][0] == '.' + && ((char **)tglob.m_pat->content)[0][1] == '/')) && env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) { - path_research(mul_pat->content, path, &match); + path_research(&tglob, path); ft_tabdel(&path); } - if (((char *)mul_pat->content)[0] != '/') - dir_research(mul_pat->content, ".", &match); + if (((char **)tglob.m_pat->content)[0][0] != '/') + dir_research(&tglob, "."); else - dir_research(mul_pat->content + 1, "/", &match); - mul_pat = mul_pat->next; + dir_research(&tglob, "/"); + tglob.m_pat = tglob.m_pat->next; } - ft_ld_clear(&mul_pat, &ft_strdel); - return (treat_glob(&match)); + ft_ld_clear(&tglob.m_pat, &ft_strdel); + return (treat_glob(&tglob.match)); } diff --git a/42sh/src/glob/glob_print.c b/42sh/src/glob/glob_print.c index 38a8bdc0..ce0cd349 100644 --- a/42sh/src/glob/glob_print.c +++ b/42sh/src/glob/glob_print.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/05 16:09:40 by wescande #+# #+# */ -/* Updated: 2017/01/26 17:14:32 by wescande ### ########.fr */ +/* Updated: 2017/01/27 18:29:32 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,20 @@ void ft_tabprint_fd(char **mytab, int fd) } } +void print_esc(t_token *token) +{ + char *str = token->data; + while (*str) + { + if (is_char_esc(token->esc, token->data, str)) + ft_dprintf(3, "\\%c", *str); + else + ft_dprintf(3, "%c", *str); + ++str; + } + ft_dprintf(3, "\n"); +} + void glob_print(t_list *lst, t_data *data) { t_token *token; @@ -40,7 +54,8 @@ void glob_print(t_list *lst, t_data *data) type = token->type; while (type >> (i++ + 2)) ; - glob_ret = glob(token->data, data->env); + glob_ret = glob(token->data, token->esc, data->env); + print_esc(token); DG("%02i '%s'", i, token->data); ft_tabprint_fd(glob_ret, 3); lst = lst->next; diff --git a/42sh/src/glob/is_char_esc.c b/42sh/src/glob/is_char_esc.c new file mode 100644 index 00000000..ba85450c --- /dev/null +++ b/42sh/src/glob/is_char_esc.c @@ -0,0 +1,23 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* is_char_esc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: wescande +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2017/01/27 18:19:55 by wescande #+# #+# */ +/* Updated: 2017/01/27 18:23:22 by wescande ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "glob.h" + +int is_char_esc(const char *esc, const char *ini_str, const char *str_pos) +{ + int pos; + + pos = str_pos - ini_str; + if ((esc[pos / 8] >> pos % 8) & 1) + return (1); + return (0); +} diff --git a/42sh/src/lexer/ft_tokenize.c b/42sh/src/lexer/ft_tokenize.c index 3955993f..de620b65 100644 --- a/42sh/src/lexer/ft_tokenize.c +++ b/42sh/src/lexer/ft_tokenize.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 13:37:11 by jhalford #+# #+# */ -/* Updated: 2017/01/11 16:11:02 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:43:46 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/lexer/lexer_backslash.c b/42sh/src/lexer/lexer_backslash.c index 9a6f2438..3a0aefff 100644 --- a/42sh/src/lexer/lexer_backslash.c +++ b/42sh/src/lexer/lexer_backslash.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 11:56:49 by jhalford #+# #+# */ -/* Updated: 2016/12/03 12:35:13 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:52:46 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,6 +18,6 @@ int lexer_backslash(t_list **alst, char *str) token = (*alst)->content; token->type = TK_WORD; - token_append(token, str[1]); + token_append(token, str[1], 1); return (ft_tokenize(alst, str + 2, WORD)); } diff --git a/42sh/src/lexer/lexer_default.c b/42sh/src/lexer/lexer_default.c index 04c87fca..08ccabcf 100644 --- a/42sh/src/lexer/lexer_default.c +++ b/42sh/src/lexer/lexer_default.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 18:36:21 by jhalford #+# #+# */ -/* Updated: 2017/01/11 16:10:53 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:53:10 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,7 +28,7 @@ int lexer_default(t_list **alst, char *str) else state = WORD; token = (*alst)->content; - token_append(token, *str); + token_append(token, *str, 0); token->type = TK_N_WORD; return (ft_tokenize(alst, str + 1, state)); } diff --git a/42sh/src/lexer/lexer_dquote.c b/42sh/src/lexer/lexer_dquote.c index d5c1b2e3..56a49ab2 100644 --- a/42sh/src/lexer/lexer_dquote.c +++ b/42sh/src/lexer/lexer_dquote.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 18:36:58 by jhalford #+# #+# */ -/* Updated: 2017/01/10 15:15:24 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:53:31 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -23,9 +23,9 @@ int lexer_dquote(t_list **alst, char *str) return (ft_tokenize(alst, str + 1, DEFAULT)); if (*str == '\\') { - token_append(token, *(str + 1)); + token_append(token, *(str + 1), 1); return (lexer_dquote(alst, str + 1)); } - token_append(token, *str); + token_append(token, *str, 1); return (lexer_dquote(alst, str)); } diff --git a/42sh/src/lexer/lexer_great.c b/42sh/src/lexer/lexer_great.c index d02a183b..82b9e4b4 100644 --- a/42sh/src/lexer/lexer_great.c +++ b/42sh/src/lexer/lexer_great.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:06:35 by jhalford #+# #+# */ -/* Updated: 2017/01/10 14:48:49 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:54:53 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,17 +17,17 @@ int lexer_great(t_list **alst, char *str) t_token *token; token = (*alst)->content; - token_append(token, str[0]); + token_append(token, str[0], 0); if (*(str + 1) == '&') { token->type = TK_GREATAND; - token_append(token, str[1]); + token_append(token, str[1], 0); return (lexer_greatand(alst, str + 2)); } else if (*(str + 1) == '>') { token->type = TK_DGREAT; - token_append(token, str[1]); + token_append(token, str[1], 0); return (ft_tokenize(&(*alst)->next, str + 2, DEFAULT)); } else diff --git a/42sh/src/lexer/lexer_greatand.c b/42sh/src/lexer/lexer_greatand.c index 7a32ef24..b803f0f1 100644 --- a/42sh/src/lexer/lexer_greatand.c +++ b/42sh/src/lexer/lexer_greatand.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 11:56:58 by jhalford #+# #+# */ -/* Updated: 2016/12/03 11:57:09 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:55:04 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,12 +20,12 @@ int lexer_greatand(t_list **alst, char *str) token->type = TK_GREATAND; if (ft_isdigit(*str)) { - token_append(token, *str); + token_append(token, *str, 0); return (lexer_greatand(alst, str + 1)); } else if (*str == '-') { - token_append(token, *str); + token_append(token, *str, 0); return (ft_tokenize(&(*alst)->next, str + 1, DEFAULT)); } return (ft_tokenize(alst, str, DEFAULT)); diff --git a/42sh/src/lexer/lexer_less.c b/42sh/src/lexer/lexer_less.c index bc3fa958..ea7c8398 100644 --- a/42sh/src/lexer/lexer_less.c +++ b/42sh/src/lexer/lexer_less.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:06:53 by jhalford #+# #+# */ -/* Updated: 2017/01/10 14:27:51 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:55:16 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,17 +17,17 @@ int lexer_less(t_list **alst, char *str) t_token *token; token = (*alst)->content; - token_append(token, str[0]); + token_append(token, str[0], 0); if (*(str + 1) == '&') { token->type = TK_LESSAND; - token_append(token, str[1]); + token_append(token, str[1], 0); return (lexer_lessand(alst, str + 2)); } else if (*(str + 1) == '<') { token->type = TK_DLESS; - token_append(token, str[1]); + token_append(token, str[1], 0); return (ft_tokenize(&(*alst)->next, str + 2, DEFAULT)); } else diff --git a/42sh/src/lexer/lexer_lessand.c b/42sh/src/lexer/lexer_lessand.c index 089c78bd..fc6eef56 100644 --- a/42sh/src/lexer/lexer_lessand.c +++ b/42sh/src/lexer/lexer_lessand.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 11:58:51 by jhalford #+# #+# */ -/* Updated: 2016/12/03 11:58:52 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:55:27 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,12 +20,12 @@ int lexer_lessand(t_list **alst, char *str) token->type = TK_LESSAND; if (ft_isdigit(*str)) { - token_append(token, *str); + token_append(token, *str, 0); return (lexer_lessand(alst, str + 1)); } else if (*str == '-') { - token_append(token, *str); + token_append(token, *str, 0); return (ft_tokenize(&(*alst)->next, str + 1, DEFAULT)); } return (ft_tokenize(alst, str, DEFAULT)); diff --git a/42sh/src/lexer/lexer_number.c b/42sh/src/lexer/lexer_number.c index b5cffe2d..6488442b 100644 --- a/42sh/src/lexer/lexer_number.c +++ b/42sh/src/lexer/lexer_number.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:06:45 by jhalford #+# #+# */ -/* Updated: 2017/01/10 14:29:46 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:52:58 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,7 +27,7 @@ int lexer_number(t_list **alst, char *str) return (ft_tokenize(alst, str, LESS)); else if (ft_isdigit(*str)) { - token_append(token, *str); + token_append(token, *str, 0); return (lexer_number(alst, str + 1)); } return (ft_tokenize(alst, str, DEFAULT)); diff --git a/42sh/src/lexer/lexer_quote.c b/42sh/src/lexer/lexer_quote.c index 401fd07f..4b99e6fe 100644 --- a/42sh/src/lexer/lexer_quote.c +++ b/42sh/src/lexer/lexer_quote.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:07:08 by jhalford #+# #+# */ -/* Updated: 2017/01/10 15:13:06 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:52:21 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,6 +21,6 @@ int lexer_quote(t_list **alst, char *str) str++; if (*str == '\'') return (ft_tokenize(alst, str + 1, WORD)); - token_append(token, *str); + token_append(token, *str, 1); return (lexer_quote(alst, str)); } diff --git a/42sh/src/lexer/lexer_var.c b/42sh/src/lexer/lexer_var.c index 61011338..ab6e0b79 100644 --- a/42sh/src/lexer/lexer_var.c +++ b/42sh/src/lexer/lexer_var.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/10 14:54:57 by jhalford #+# #+# */ -/* Updated: 2017/01/10 16:36:15 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:55:54 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ int lexer_var(t_list **alst, char *str) token->type = TK_N_WORD; str++; if (!ft_strchr(token->data, '$')) - token_append(token, '$'); + token_append(token, '$', 0); if (!*str) { token_expand_var(token); @@ -32,6 +32,6 @@ int lexer_var(t_list **alst, char *str) token_expand_var(token); return (ft_tokenize(alst, str, state)); } - token_append(token, *str); + token_append(token, *str, 0); return (lexer_var(alst, str)); } diff --git a/42sh/src/lexer/lexer_word.c b/42sh/src/lexer/lexer_word.c index 53ed4746..f24a303f 100644 --- a/42sh/src/lexer/lexer_word.c +++ b/42sh/src/lexer/lexer_word.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:07:11 by jhalford #+# #+# */ -/* Updated: 2017/01/11 15:38:03 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:56:02 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -25,6 +25,6 @@ int lexer_word(t_list **alst, char *str) return (ft_tokenize(&(*alst)->next, str, GREAT)); else if (*str == '<') return (ft_tokenize(&(*alst)->next, str, LESS)); - token_append(token, *str); + token_append(token, *str, 0); return (ft_tokenize(alst, str + 1, WORD)); } diff --git a/42sh/src/lexer/token_append.c b/42sh/src/lexer/token_append.c index c08e5c5a..649f0901 100644 --- a/42sh/src/lexer/token_append.c +++ b/42sh/src/lexer/token_append.c @@ -6,19 +6,26 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/11 17:18:42 by jhalford #+# #+# */ -/* Updated: 2016/11/11 17:47:15 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 20:08:12 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ #include "lexer.h" -int token_append(t_token *token, char c) +int token_append(t_token *token, char c, short int esc) { - if ((int)ft_strlen(token->data) >= token->size) + int len; + + len = ft_strlen(token->data); + if (len >= token->size) { - token->data = (char *)ft_realloc(token->data, token->size + 10); - token->size += 10; + token->size += 8; + token->data = (char *)ft_realloc(token->data, token->size + 1); + token->esc = (char *)ft_realloc(token->esc, token->size / 8); + token->esc[token->size / 8 - 1] = 0; } ft_strcat(token->data, (char[2]){c, '\0'}); + if (esc) + token->esc[len / 8] |= 1 << len % 8; return (0); } diff --git a/42sh/src/lexer/token_expand_var.c b/42sh/src/lexer/token_expand_var.c index b729611c..9743d062 100644 --- a/42sh/src/lexer/token_expand_var.c +++ b/42sh/src/lexer/token_expand_var.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/10 14:57:53 by jhalford #+# #+# */ -/* Updated: 2017/01/10 16:37:33 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:56:40 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -24,5 +24,5 @@ void token_expand_var(t_token *token) *dollar = 0; if (val) while (*val) - token_append(token, *val++); + token_append(token, *val++, 1); } diff --git a/42sh/src/lexer/token_free.c b/42sh/src/lexer/token_free.c index 50ef0d0f..fc42c83a 100644 --- a/42sh/src/lexer/token_free.c +++ b/42sh/src/lexer/token_free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:07:30 by jhalford #+# #+# */ -/* Updated: 2017/01/12 13:18:46 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:35:37 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,6 +19,9 @@ void token_free(void *data, size_t size) (void)size; token = data; if (!(token->type & TK_NON_FREEABLE)) + { ft_strdel(&token->data); + ft_strdel(&token->esc); + } free(token); } diff --git a/42sh/src/lexer/token_init.c b/42sh/src/lexer/token_init.c index cf9fe1b7..8d113343 100644 --- a/42sh/src/lexer/token_init.c +++ b/42sh/src/lexer/token_init.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 15:30:25 by jhalford #+# #+# */ -/* Updated: 2017/01/11 15:45:10 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 15:35:04 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -18,7 +18,8 @@ t_token *token_init(void) token = (t_token *)malloc(sizeof(t_token)); token->type = 0; - token->size = 10; - token->data = ft_strnew(token->size); + token->size = 8; + token->data = ft_strnew(token->size + 1); + token->esc = ft_strnew(token->size / 8); return (token); } diff --git a/42sh/src/lexer/token_print.c b/42sh/src/lexer/token_print.c index 97876ddb..3edd1759 100644 --- a/42sh/src/lexer/token_print.c +++ b/42sh/src/lexer/token_print.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 14:39:01 by jhalford #+# #+# */ -/* Updated: 2017/01/12 14:48:33 by jhalford ### ########.fr */ +/* Updated: 2017/01/27 16:08:16 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,6 +17,7 @@ void token_print(t_list *lst) t_token *token; int i; t_type type; + int index; while (lst) { @@ -26,6 +27,10 @@ void token_print(t_list *lst) while (type >> (i++ + 2)) ; DG("%02i '%s'", i, token->data); + index = -1; + while (++index < token->size / 8) + ft_dprintf(3, "|%b vs %x vs %c| ", token->esc[index], token->esc[index], token->esc[index]); + ft_dprintf(3, "\n"); lst = lst->next; } } From 4f5c65b9a25455a9e4e3ae9c22a55fc58cb90f9d Mon Sep 17 00:00:00 2001 From: wescande Date: Sat, 28 Jan 2017 01:19:03 +0100 Subject: [PATCH 14/15] =?UTF-8?q?finalisation=20du=20lexer=20avec=20les=20?= =?UTF-8?q?char=20echapp=C3=A9=20->=201=20unsigned=20char=20pour=208=20cha?= =?UTF-8?q?r=20du=20token=20(1=20bit=20pour=201=20char).=20Module=20glob?= =?UTF-8?q?=20en=20place=20en=20tenant=20compte=20des=20echapp=C3=A9.=20fo?= =?UTF-8?q?nction=20is=5Fchar=5Fesc=20en=20place=20pour=20une=20utilisatio?= =?UTF-8?q?n=20plus=20globale?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 42sh/Makefile | 4 +- 42sh/includes/glob.h | 30 ++++++--- 42sh/includes/lexer.h | 10 +-- 42sh/src/glob/dir_glob.c | 13 ++-- 42sh/src/glob/expand_brace.c | 113 +++++++++++++++++++++++----------- 42sh/src/glob/glob.c | 88 +++++++++++++++++--------- 42sh/src/glob/glob_print.c | 17 +---- 42sh/src/glob/is_char_esc.c | 7 ++- 42sh/src/glob/match_pattern.c | 72 +++++++++++----------- 42sh/src/lexer/token_append.c | 6 +- 42sh/src/lexer/token_free.c | 4 +- 42sh/src/lexer/token_init.c | 4 +- 42sh/src/lexer/token_print.c | 5 +- 13 files changed, 218 insertions(+), 155 deletions(-) diff --git a/42sh/Makefile b/42sh/Makefile index 9bfbaf2d..fe295d2b 100644 --- a/42sh/Makefile +++ b/42sh/Makefile @@ -59,6 +59,7 @@ glob/dir_glob.c\ glob/expand_brace.c\ glob/glob.c\ glob/glob_print.c\ +glob/is_char_esc.c\ glob/lib_perso/ft_ld_back.c\ glob/lib_perso/ft_ld_clear.c\ glob/lib_perso/ft_ld_del.c\ @@ -188,7 +189,8 @@ parser/parse_word.c SRCS = $(addprefix $(SRC_DIR), $(SRC_BASE)) OBJS = $(addprefix $(OBJ_DIR), $(SRC_BASE:.c=.o)) -all : $(NAME) +all : + @make -j $(NAME) $(NAME): $(LIBFT_LIB) $(OBJ_DIR) $(OBJS) @$(CC) $(FLAGS) $(D_FLAGS) \ diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index 943ab15a..dd568f8f 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/27 19:13:15 by wescande ### ########.fr */ +/* Updated: 2017/01/28 00:14:11 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -15,6 +15,9 @@ # include "minishell.h" +# define CH(x) ((char **)(x)->content) +# define UCH(x) ((unsigned char **)(x)->content) + typedef struct s_ld { void *content; @@ -24,21 +27,30 @@ typedef struct s_ld typedef struct s_glob { - const char *pat; - const char *esc; - t_ld *match; - t_ld *m_pat; + const char *pat; + const unsigned char *esc; + t_ld *match; + t_ld *m_pat; } t_glob; -char **glob(const char *str, const char *esc, char **env); +typedef struct s_expand +{ + t_ld **wk; + char *str; + unsigned char *esc; + char **split; + char *s1; +} t_expand; + +char **glob(const char *str, const unsigned char *esc, char **env); void expand_brace(t_glob *tglob); void glob_print(t_list *token, t_data *data); int match_pattern(t_glob *tglob, char *str, char *full_word); -void dir_research(t_glob *tglob, char *path); -void dir_research_recursive(t_glob *tglob, char *p); +void dir_research(t_glob *tglob, char *p, const char *pat); +void dir_research_recursive(t_glob *tglob, char *p, const char *pat); int is_directory(const char *path); -int is_char_esc(const char *esc, const char *ini_str, const char *str_pos); +int is_char_esc(const unsigned char *esc, const char *ini_str, const char *str_pos); /* ** LIST D: diff --git a/42sh/includes/lexer.h b/42sh/includes/lexer.h index e1dcf24f..9913c091 100644 --- a/42sh/includes/lexer.h +++ b/42sh/includes/lexer.h @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/01 12:15:50 by jhalford #+# #+# */ -/* Updated: 2017/01/27 15:52:11 by wescande ### ########.fr */ +/* Updated: 2017/01/27 21:47:44 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -61,10 +61,10 @@ enum e_lexstate struct s_token { - t_type type; - char *data; - char *esc; - int size; + t_type type; + char *data; + unsigned char *esc; + int size; }; typedef struct s_data t_data; diff --git a/42sh/src/glob/dir_glob.c b/42sh/src/glob/dir_glob.c index 804c9465..92b90348 100644 --- a/42sh/src/glob/dir_glob.c +++ b/42sh/src/glob/dir_glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/27 18:32:54 by wescande ### ########.fr */ +/* Updated: 2017/01/27 23:48:18 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,7 +20,7 @@ int is_directory(const char *path) return (S_ISDIR(path_stat.st_mode)); } -void dir_research(t_glob *gl, char *p) +void dir_research(t_glob *gl, char *p, const char *pat) { DIR *dir; struct dirent *in; @@ -38,6 +38,7 @@ void dir_research(t_glob *gl, char *p) path_tmp = ft_strjoin(p, in->d_name); else path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1); + gl->pat = pat; if (match_pattern(gl, in->d_name, path_tmp)) ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 * (path_tmp[0] == '.' && path_tmp[1] == '/'))); @@ -47,13 +48,13 @@ void dir_research(t_glob *gl, char *p) } } -void dir_research_recursive(t_glob *gl, char *p) +void dir_research_recursive(t_glob *gl, char *p, const char *pat) { DIR *dir; struct dirent *in; char *path_tmp; - if (ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.') + if ((ft_strlen(p) <= 1 || p[ft_strlen(p) - 1] != '.') && is_directory(p)) { if (!(dir = opendir(p))) return ; @@ -65,8 +66,8 @@ void dir_research_recursive(t_glob *gl, char *p) path_tmp = ft_strjoin(p, in->d_name); else path_tmp = ft_strjoinf(ft_strjoin(p, "/"), in->d_name, 1); - if (is_directory(path_tmp)) - dir_research_recursive(gl, path_tmp); + dir_research_recursive(gl, path_tmp, pat); + gl->pat = pat; if (match_pattern(gl, in->d_name, path_tmp)) ft_ld_pushfront(&gl->match, ft_strdup(path_tmp + 2 * (path_tmp[0] == '.' && path_tmp[1] == '/'))); diff --git a/42sh/src/glob/expand_brace.c b/42sh/src/glob/expand_brace.c index 8db42a27..78211f16 100644 --- a/42sh/src/glob/expand_brace.c +++ b/42sh/src/glob/expand_brace.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/12 19:00:29 by wescande #+# #+# */ -/* Updated: 2017/01/27 20:12:12 by wescande ### ########.fr */ +/* Updated: 2017/01/28 01:13:26 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,16 +20,17 @@ ** -char *pat -> pattern string to be looking for expand */ -static char **generate_tab(const char *pat, const char *esc, int dup) +static char **gen_tab(const char *pat, + const unsigned char *esc, int dup) { char **my_tab; - if (!(my_tab = (char **)malloc(sizeof(char*) * 3))) + if (!(my_tab = (char **)malloc(sizeof(char *) * 3))) return (NULL); if (dup) { my_tab[0] = ft_strdup(pat); - my_tab[1] = ft_strdup(esc); + my_tab[1] = ft_strdup((const char *)esc); } else { @@ -40,66 +41,104 @@ static char **generate_tab(const char *pat, const char *esc, int dup) return (my_tab); } -static char *calc_expand_esc(const char *esc, - int nb_start, int nb_middle, int nb_end) +static unsigned char *calc_expand_esc(const unsigned char *esc, + int nb_start, int nb_middle, int *nb_end) { - char *new_esc; - int index; + unsigned char *new_esc; + int index; + int pos; - new_esc = ft_memalloc(sizeof(char) * (nb_start + nb_middle + nb_end) / 8); + if (!(new_esc = ft_memalloc(sizeof(char) * + ((nb_start + nb_middle + nb_end[1]) / 8) + 1))) + return (NULL); index = -1; while (++index < nb_start) - new_esc[index / 8] |= (esc[index / 8] >> index % 8) & 1 << index % 8; - //copy the nb_start first bit of esc. - //append nb_middle bit at status 0 - //append nb_end last bit from end of esc. + new_esc[index / 8] |= + ((esc[index / 8] >> (7 - index % 8)) & 1) << (7 - index % 8); + pos = -1; + while (++pos < nb_middle) + { + new_esc[index / 8] |= 1 << (7 - index % 8); + ++index; + } + pos = nb_end[0]; + while (++pos <= nb_end[0] + nb_end[1]) + { + new_esc[index / 8] |= + ((esc[pos / 8] >> (7 - pos % 8)) & 1) << (7 - index % 8); + ++index; + } return (new_esc); } -static int search_brace(t_ld **wk, char *str, char *esc, int index) +static void iter_on_each(t_expand *me) +{ + int i; + char **my_new; + char *first; + unsigned char *second; + t_ld *wk_tmp; + + i = -1; + wk_tmp = *me->wk; + while (me->split[++i]) + { + first = ft_strjoinf(ft_strjoin(me->s1, me->split[i]), me->str + 1, 1); + second = calc_expand_esc(me->esc, + ft_strlen(me->s1), + ft_strlen(me->split[i]), + (int[2]){me->str - CH(*me->wk)[0], ft_strlen(me->str + 1)}); + my_new = gen_tab(first, second, 0); + ft_ld_pushfront(&wk_tmp, my_new); + } + me->wk = &wk_tmp; +} + +static int search_brace(t_expand *me) { char *start; - char *s1; - char **split; start = NULL; - while (*str) + while (*me->str) { - start = *str == '{' ? str : start; - if (*str == '}' && start) + start = *me->str == '{' && !is_char_esc(me->esc, + CH(*me->wk)[0], me->str) ? me->str : start; + if (*me->str == '}' && start + && !is_char_esc(me->esc, CH(*me->wk)[0], me->str)) { - s1 = ft_strsub(start, 1, str - start - 1); - split = ft_strsplit(s1, ','); - ft_strdel(&s1); - s1 = ft_strsub((*wk)->content, 0, start - (char *)(*wk)->content); - while (split[++index]) - ft_ld_pushfront(wk, generate_tab(ft_strjoinf(ft_strjoin(s1, - split[index]), str + 1, 1), calc_expand_esc(esc, - ft_strlen(s1), ft_strlen(split[index]), ft_strlen(str +1)), 0)); - ft_strdel(&s1); - ft_tabdel(&split); + me->s1 = ft_strsub(start, 1, me->str - start - 1); + me->split = ft_strsplit(me->s1, ','); + ft_strdel(&me->s1); + me->s1 = ft_strsub(CH(*me->wk)[0], 0, start - CH(*me->wk)[0]); + iter_on_each(me); + ft_strdel(&me->s1); + ft_tabdel(&me->split); return (1); } - ++str; + ++me->str; } return (0); } -void expand_brace(t_glob *gl) +void expand_brace(t_glob *gl) { - t_ld *tmp; - int do_it; + t_ld *tmp; + int do_it; + t_expand me; - ft_ld_pushfront(&gl->m_pat, generate_tab("", "", 1)); - ft_ld_pushfront(&gl->m_pat, generate_tab(gl->pat, gl->esc, 1)); + ft_ld_pushfront(&gl->m_pat, gen_tab("", (const unsigned char *)"", 1)); + ft_ld_pushfront(&gl->m_pat, gen_tab(gl->pat, gl->esc, 1)); + me = (t_expand){NULL, NULL, NULL, NULL, NULL}; do_it = 1; while (do_it) { do_it = 0; while (gl->m_pat->next) { - if ((tmp = gl->m_pat) && search_brace(&gl->m_pat, - ((char **)gl->m_pat->content)[0],((char **)gl->m_pat->content)[1], -1)) + me.wk = &gl->m_pat; + me.esc = UCH(gl->m_pat)[1]; + me.str = CH(gl->m_pat)[0]; + if ((tmp = gl->m_pat) && search_brace(&me)) { ft_ld_del(&tmp, &ft_tabdel); do_it = 1; diff --git a/42sh/src/glob/glob.c b/42sh/src/glob/glob.c index de095b22..d09d531d 100644 --- a/42sh/src/glob/glob.c +++ b/42sh/src/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/27 19:05:38 by wescande ### ########.fr */ +/* Updated: 2017/01/28 01:17:04 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,13 +21,13 @@ ** to just expanse in local directory and not in path */ -static void path_research(t_glob *tglob, char **path) +static void path_research(t_glob *gl, char **path) { int i; i = -1; while (path[++i]) - dir_research(tglob, path[i]); + dir_research(gl, path[i], gl->pat); } static char **treat_glob(t_ld **match) @@ -47,49 +47,77 @@ static void add_simple_pat(t_glob *gl) char *str; int start; - str = ((char **)gl->m_pat->content)[0]; + str = (char *)gl->pat; start = 0; while (*str) { - if (!is_char_esc(((char **)gl->m_pat->content)[1], - ((char **)gl->m_pat->content)[0], str)) + if (!is_char_esc(gl->esc, gl->pat, str)) { - if (*str == '[') - start = 1; - else if (*str == ']' && start == 1) - return ; - else if (*str == '*' || *str == '?') - return ; + if (*str == '[') + start = 1; + else if (*str == ']' && start == 1) + return ; + else if (*str == '*' || *str == '?') + return ; } ++str; } - ft_ld_pushfront(&gl->match, ((char **)gl->m_pat->content)[0]); + ft_ld_pushfront(&gl->match, ft_strdup(gl->pat)); } -char **glob(const char *pat, const char *esc, char **env) +static void printme_me(const char *pat, const unsigned char *esc) { - t_glob tglob; + char *str; + int index; + int len; + + str = (char *)pat; + while (*str) + { + ft_dprintf(3, is_char_esc(esc, pat, str) ? "\\%c" : "%c", *str); + ++str; + } + ft_dprintf(3, "\n"); + len = ft_strlen(pat); + index = -1; + while (++index < len) + ft_dprintf(3, ((esc[index / 8] >> (7 - index % 8)) & 1) ? " 1" : "0"); + ft_dprintf(3, "\n"); + index = 0; + while (index < len) + { + ft_dprintf(3, "%08b", esc[index / 8]); + index += 8; + } + ft_dprintf(3, "\n"); +} + +char **glob(const char *pat, const unsigned char *esc, char **env) +{ + t_glob gl; char **path; - tglob = (t_glob){pat, esc, NULL, NULL}; - expand_brace(&tglob, tglob.pat); - while (tglob.m_pat->next) + gl = (t_glob){pat, esc, NULL, NULL}; + expand_brace(&gl); + while (gl.m_pat->next) { - add_simple_pat(&tglob); - if (!(((char **)tglob.m_pat->content)[0][0] == '/' - || (((char **)tglob.m_pat->content)[0][0] == '.' - && ((char **)tglob.m_pat->content)[0][1] == '/')) - && env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) + gl.pat = ((char **)gl.m_pat->content)[0]; + gl.esc = ((unsigned char **)gl.m_pat->content)[1]; + printme_me(gl.pat, gl.esc); + add_simple_pat(&gl); + if (!(gl.pat[0] == '/' || (gl.pat[0] == '.' && gl.pat[1] == '/')) + && env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':'))) { - path_research(&tglob, path); + path_research(&gl, path); ft_tabdel(&path); } - if (((char **)tglob.m_pat->content)[0][0] != '/') - dir_research(&tglob, "."); + gl.pat = ((char **)gl.m_pat->content)[0]; + if (gl.pat[0] != '/') + dir_research(&gl, ".", gl.pat); else - dir_research(&tglob, "/"); - tglob.m_pat = tglob.m_pat->next; + dir_research(&gl, "/", gl.pat + 1); + gl.m_pat = gl.m_pat->next; } - ft_ld_clear(&tglob.m_pat, &ft_strdel); - return (treat_glob(&tglob.match)); + ft_ld_clear(&gl.m_pat, &ft_tabdel); + return (treat_glob(&gl.match)); } diff --git a/42sh/src/glob/glob_print.c b/42sh/src/glob/glob_print.c index ce0cd349..46fcdd8d 100644 --- a/42sh/src/glob/glob_print.c +++ b/42sh/src/glob/glob_print.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/05 16:09:40 by wescande #+# #+# */ -/* Updated: 2017/01/27 18:29:32 by wescande ### ########.fr */ +/* Updated: 2017/01/27 21:57:24 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,20 +26,6 @@ void ft_tabprint_fd(char **mytab, int fd) } } -void print_esc(t_token *token) -{ - char *str = token->data; - while (*str) - { - if (is_char_esc(token->esc, token->data, str)) - ft_dprintf(3, "\\%c", *str); - else - ft_dprintf(3, "%c", *str); - ++str; - } - ft_dprintf(3, "\n"); -} - void glob_print(t_list *lst, t_data *data) { t_token *token; @@ -55,7 +41,6 @@ void glob_print(t_list *lst, t_data *data) while (type >> (i++ + 2)) ; glob_ret = glob(token->data, token->esc, data->env); - print_esc(token); DG("%02i '%s'", i, token->data); ft_tabprint_fd(glob_ret, 3); lst = lst->next; diff --git a/42sh/src/glob/is_char_esc.c b/42sh/src/glob/is_char_esc.c index ba85450c..5c06a546 100644 --- a/42sh/src/glob/is_char_esc.c +++ b/42sh/src/glob/is_char_esc.c @@ -6,18 +6,19 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/27 18:19:55 by wescande #+# #+# */ -/* Updated: 2017/01/27 18:23:22 by wescande ### ########.fr */ +/* Updated: 2017/01/27 23:45:51 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ #include "glob.h" -int is_char_esc(const char *esc, const char *ini_str, const char *str_pos) +int is_char_esc(const unsigned char *esc, + const char *ini_str, const char *str_pos) { int pos; pos = str_pos - ini_str; - if ((esc[pos / 8] >> pos % 8) & 1) + if ((esc[pos / 8] >> (7 - pos % 8)) & 1) return (1); return (0); } diff --git a/42sh/src/glob/match_pattern.c b/42sh/src/glob/match_pattern.c index 5e95b55b..8707c3c4 100644 --- a/42sh/src/glob/match_pattern.c +++ b/42sh/src/glob/match_pattern.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/24 17:30:23 by wescande #+# #+# */ -/* Updated: 2017/01/24 20:58:47 by wescande ### ########.fr */ +/* Updated: 2017/01/27 23:45:39 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -31,35 +31,34 @@ static int match_bracket_char(char **cmp, const char *pat, char c, int neg) *cmp += 2; } else if (!neg && **cmp == c) - { return (1); - } else if (neg && **cmp == c) - { return (0); - } return (-1); } -static int match_bracket(const char **pat, char c) +static int match_bracket(t_glob *gl, char c) { char *cmp; int neg; int ret; - cmp = (char *)*pat + 1; - while (**pat != ']') + cmp = (char *)gl->pat + 1; + while (*gl->pat != ']' + || is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], gl->pat)) { - if (!**pat) + if (!*gl->pat) return (0); - ++*pat; + ++gl->pat; } neg = 0; - if ((*cmp == '^' || *cmp == '!') && ++neg) + if ((*cmp == '^' || *cmp == '!') + && !is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], cmp) + && ++neg) ++cmp; - while (cmp < *pat) + while (cmp < gl->pat) { - ret = match_bracket_char(&cmp, *pat, c, neg); + ret = match_bracket_char(&cmp, gl->pat, c, neg); if (ret != -1) return (ret); ++cmp; @@ -67,19 +66,19 @@ static int match_bracket(const char **pat, char c) return (neg); } -static int match_star(const char *pat, char *str, - char *full_word, t_ld **match) +static int match_star(t_glob *gl, char *str, char *full_word) { char *fix; - if (pat[1] == '*') - dir_research_recursive(pat, full_word, match); - if (!pat[1]) + if (gl->pat[1] == '*' && + !is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], gl->pat + 1)) + dir_research_recursive(gl, full_word, gl->pat + 1); + if (!*++gl->pat) return (1); fix = str + ft_strlen(str); while (fix > str) { - if (match_pattern(pat + 1, fix, full_word, match)) + if (match_pattern(gl, fix, full_word)) return (1); --fix; } @@ -94,32 +93,31 @@ const char *manage_pat(const char *pat, char *str) return (pat); } -int match_pattern(const char *pat, char *str, - char *full_word, t_ld **match) +int match_pattern(t_glob *gl, char *str, char *full_word) { - pat = manage_pat(pat, str); - while (*pat) + gl->pat = manage_pat(gl->pat, str); + while (*gl->pat) { - if (*pat == '?') + if (is_char_esc(gl->esc, ((char **)gl->m_pat->content)[0], gl->pat)) + { + if (*str != *gl->pat) + return (0); + } + else if (*gl->pat == '?') str++; - else if (*pat == '[') + else if (*gl->pat == '[') { - if (!match_bracket(&pat, *str)) + if (!match_bracket(gl, *str)) return (0); } - else if (*pat == '*') - return (match_star(pat, str, full_word, match)); - else if (*pat == '\\') - { - if (!*++pat || *str != *pat) - return (0); - } - else if (*pat == '/' && !*str && is_directory(full_word)) - dir_research((pat + 1), full_word, match); - else if (*pat != *str) + else if (*gl->pat == '*') + return (match_star(gl, str, full_word)); + else if (*gl->pat == '/' && !*str && is_directory(full_word)) + dir_research(gl, full_word, gl->pat + 1); + else if (*gl->pat != *str) return (0); ++str; - ++pat; + ++gl->pat; } return (*str ? 0 : 1); } diff --git a/42sh/src/lexer/token_append.c b/42sh/src/lexer/token_append.c index 649f0901..fc9845fd 100644 --- a/42sh/src/lexer/token_append.c +++ b/42sh/src/lexer/token_append.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/11 17:18:42 by jhalford #+# #+# */ -/* Updated: 2017/01/27 20:08:12 by wescande ### ########.fr */ +/* Updated: 2017/01/27 21:54:32 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,11 +21,11 @@ int token_append(t_token *token, char c, short int esc) { token->size += 8; token->data = (char *)ft_realloc(token->data, token->size + 1); - token->esc = (char *)ft_realloc(token->esc, token->size / 8); + token->esc = (unsigned char *)ft_realloc((char *)token->esc, token->size / 8 + 1); token->esc[token->size / 8 - 1] = 0; } ft_strcat(token->data, (char[2]){c, '\0'}); if (esc) - token->esc[len / 8] |= 1 << len % 8; + token->esc[len / 8] |= 1 << (7 - len % 8); return (0); } diff --git a/42sh/src/lexer/token_free.c b/42sh/src/lexer/token_free.c index fc42c83a..466d4407 100644 --- a/42sh/src/lexer/token_free.c +++ b/42sh/src/lexer/token_free.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/12/03 12:07:30 by jhalford #+# #+# */ -/* Updated: 2017/01/27 15:35:37 by wescande ### ########.fr */ +/* Updated: 2017/01/27 21:54:05 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,7 +21,7 @@ void token_free(void *data, size_t size) if (!(token->type & TK_NON_FREEABLE)) { ft_strdel(&token->data); - ft_strdel(&token->esc); + ft_memdel((void **)&token->esc); } free(token); } diff --git a/42sh/src/lexer/token_init.c b/42sh/src/lexer/token_init.c index 8d113343..009f27dd 100644 --- a/42sh/src/lexer/token_init.c +++ b/42sh/src/lexer/token_init.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/10 15:30:25 by jhalford #+# #+# */ -/* Updated: 2017/01/27 15:35:04 by wescande ### ########.fr */ +/* Updated: 2017/01/27 21:54:53 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,6 +20,6 @@ t_token *token_init(void) token->type = 0; token->size = 8; token->data = ft_strnew(token->size + 1); - token->esc = ft_strnew(token->size / 8); + token->esc = (unsigned char *)ft_strnew(token->size / 8 + 1); return (token); } diff --git a/42sh/src/lexer/token_print.c b/42sh/src/lexer/token_print.c index 3edd1759..343fe5bc 100644 --- a/42sh/src/lexer/token_print.c +++ b/42sh/src/lexer/token_print.c @@ -6,7 +6,7 @@ /* By: jhalford +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2016/11/28 14:39:01 by jhalford #+# #+# */ -/* Updated: 2017/01/27 16:08:16 by wescande ### ########.fr */ +/* Updated: 2017/01/27 21:57:05 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,9 +28,6 @@ void token_print(t_list *lst) ; DG("%02i '%s'", i, token->data); index = -1; - while (++index < token->size / 8) - ft_dprintf(3, "|%b vs %x vs %c| ", token->esc[index], token->esc[index], token->esc[index]); - ft_dprintf(3, "\n"); lst = lst->next; } } From 7cfa1a4837e7ed9bed7327186538192cfc101632 Mon Sep 17 00:00:00 2001 From: wescande Date: Mon, 30 Jan 2017 12:23:13 +0100 Subject: [PATCH 15/15] finalisation norme --- 42sh/includes/glob.h | 14 ++++++++++---- 42sh/src/glob/dir_glob.c | 6 +++--- 42sh/src/glob/glob.c | 35 ++++------------------------------- 3 files changed, 17 insertions(+), 38 deletions(-) diff --git a/42sh/includes/glob.h b/42sh/includes/glob.h index dd568f8f..4ba55910 100644 --- a/42sh/includes/glob.h +++ b/42sh/includes/glob.h @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:31:18 by wescande #+# #+# */ -/* Updated: 2017/01/28 00:14:11 by wescande ### ########.fr */ +/* Updated: 2017/01/30 12:12:23 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -40,7 +40,7 @@ typedef struct s_expand unsigned char *esc; char **split; char *s1; -} t_expand; +} t_expand; char **glob(const char *str, const unsigned char *esc, char **env); void expand_brace(t_glob *tglob); @@ -48,9 +48,15 @@ void glob_print(t_list *token, t_data *data); int match_pattern(t_glob *tglob, char *str, char *full_word); void dir_research(t_glob *tglob, char *p, const char *pat); void dir_research_recursive(t_glob *tglob, char *p, const char *pat); +/* +** return TRUE if path file is a directory. +*/ int is_directory(const char *path); - -int is_char_esc(const unsigned char *esc, const char *ini_str, const char *str_pos); +/* +** return TRUE if char at str_pos in ini_str is escape. +*/ +int is_char_esc(const unsigned char *esc, + const char *ini_str, const char *str_pos); /* ** LIST D: diff --git a/42sh/src/glob/dir_glob.c b/42sh/src/glob/dir_glob.c index 92b90348..815e64d6 100644 --- a/42sh/src/glob/dir_glob.c +++ b/42sh/src/glob/dir_glob.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* glob.c :+: :+: :+: */ +/* dir_glob.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ -/* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/27 23:48:18 by wescande ### ########.fr */ +/* Created: 2017/01/30 12:07:16 by wescande #+# #+# */ +/* Updated: 2017/01/30 12:07:19 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/42sh/src/glob/glob.c b/42sh/src/glob/glob.c index d09d531d..e086c68e 100644 --- a/42sh/src/glob/glob.c +++ b/42sh/src/glob/glob.c @@ -6,7 +6,7 @@ /* By: wescande +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/01/04 16:29:54 by wescande #+# #+# */ -/* Updated: 2017/01/28 01:17:04 by wescande ### ########.fr */ +/* Updated: 2017/01/30 12:08:49 by wescande ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,11 +14,12 @@ /* ** glob return expansion of a string. -** pattern searched are ~, *, ?, [a-z], [!a-z], [^a-z], {ab, ac}, ** +** pattern searched are *, ?, [a-z], [!a-z], [^a-z], {ab, ac}, ** ** input parameters are : ** -char *pat -> pattern string to be looking for match +** -char *esc -> escape binary sequence of *pat ** -char **env -> env var. could be NULL -** to just expanse in local directory and not in path +** to just expanse in local directory and not in path dir */ static void path_research(t_glob *gl, char **path) @@ -65,33 +66,6 @@ static void add_simple_pat(t_glob *gl) ft_ld_pushfront(&gl->match, ft_strdup(gl->pat)); } -static void printme_me(const char *pat, const unsigned char *esc) -{ - char *str; - int index; - int len; - - str = (char *)pat; - while (*str) - { - ft_dprintf(3, is_char_esc(esc, pat, str) ? "\\%c" : "%c", *str); - ++str; - } - ft_dprintf(3, "\n"); - len = ft_strlen(pat); - index = -1; - while (++index < len) - ft_dprintf(3, ((esc[index / 8] >> (7 - index % 8)) & 1) ? " 1" : "0"); - ft_dprintf(3, "\n"); - index = 0; - while (index < len) - { - ft_dprintf(3, "%08b", esc[index / 8]); - index += 8; - } - ft_dprintf(3, "\n"); -} - char **glob(const char *pat, const unsigned char *esc, char **env) { t_glob gl; @@ -103,7 +77,6 @@ char **glob(const char *pat, const unsigned char *esc, char **env) { gl.pat = ((char **)gl.m_pat->content)[0]; gl.esc = ((unsigned char **)gl.m_pat->content)[1]; - printme_me(gl.pat, gl.esc); add_simple_pat(&gl); if (!(gl.pat[0] == '/' || (gl.pat[0] == '.' && gl.pat[1] == '/')) && env && (path = ft_strsplit(ft_getenv(env, "PATH"), ':')))