From f252d7191bbdf78f04e25e2d3b6b4323bb784c2b Mon Sep 17 00:00:00 2001 From: qfeuilla Date: Sat, 22 Aug 2020 16:55:22 +0200 Subject: [PATCH] solve space problem and copy last version --- Makefile | 9 +- includes/minishell.h | 9 +- .../Contents/Resources/DWARF/minishell | Bin 12446 -> 12446 bytes srcs/builtins/builtin_cd.c | 3 +- srcs/builtins/builtin_exit.c | 18 ++-- srcs/builtins/builtin_export.c | 2 +- srcs/builtins/builtin_export3.c | 92 +++++++++++++++++- srcs/builtins/builtin_pwd.c | 12 +-- srcs/builtins/builtin_unset.c | 6 +- srcs/commands/search_path.c | 15 ++- srcs/launch_commands/command_utils.c | 3 +- srcs/main.c | 4 +- srcs/parsing/parsing_utils.c | 2 +- srcs/parsing/prompt_loop.c | 3 - srcs/parsing/token_len.c | 49 ++++++---- srcs/signals/signal_handlers.c | 5 +- srcs/token_expansion/expand_tokens.c | 16 +-- srcs/token_expansion/expand_tokens_utils.c | 4 +- srcs/token_expansion/get_env.c | 3 +- srcs/token_expansion/token_expansion_utils.c | 28 +++++- 20 files changed, 200 insertions(+), 83 deletions(-) diff --git a/Makefile b/Makefile index 96f2cf6..6829696 100644 --- a/Makefile +++ b/Makefile @@ -59,8 +59,6 @@ all: $(NAME) @printf "${NC}" $(NAME): ${OBJECTS} - @rm -rf logs - @mkdir logs @make -C ${LIB_DIR} @printf "${YELLOW}=> " cc ${FLAGS} ${MAIN} ${OBJECTS} ${INCLUDE_DIRS} ${LIB} -o ${NAME} @@ -74,12 +72,7 @@ start: all valgrind_start: all @valgrind --leak-check=full --show-leak-kinds=definite ./${NAME} -test: all - @cc ${MAIN_TEST} ${OBJECTS} ${INCLUDE_DIRS} ${LIB} -o test_exec - @./test_exec - clean: - @rm -rf logs @printf "${RED}X " rm -rf ${OBJECTS} @printf "${NC}" @@ -95,4 +88,4 @@ fclean: clean re: fclean all -.PHONY: all start clean fclean re ${NAME} +.PHONY: all start clean fclean re diff --git a/includes/minishell.h b/includes/minishell.h index e049e5f..83f5446 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* minishell.h :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/24 13:40:30 by frthierr #+# #+# */ -/* Updated: 2020/08/16 11:10:21 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/17 15:19:46 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -96,6 +96,7 @@ typedef struct s_expand_tk_dt int pb; char *tmp; char *final_token; + int is_err; t_quotes qt; } t_expand_tk_dt; @@ -153,6 +154,10 @@ char *expand_token_quote(char *tk, t_expand_tk_dt d); size_t ft_strlen_etokens(char *s); int is_specialchar_dquote(char c); int is_quote_only(char *tk); +char *return_token(char **tk, int check_quote); +int expand_quote_set_vals(char *tk,\ + t_expand_tk_dt *d, int *check_quote); +char *return_expand_tk_quote(t_expand_tk_dt *d, int check_quote); /* ** _____COMMANDS_____ diff --git a/minishell.dSYM/Contents/Resources/DWARF/minishell b/minishell.dSYM/Contents/Resources/DWARF/minishell index 22f51c51ff029e4674ff87a1882120ae07ade983..c08426563e670545be7c496016cb6ce4fa26f639 100644 GIT binary patch literal 12446 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 literal 12446 zcmeI2e~=tS6~`w5LLdmMAOz*dA$UfFctpSeMlO;-a-tkbC@`RXbGx&^L~l1f#dNx%=3;#c>_Mi46nUt{nquH zE&+61)>coiSOkBXiP)_6CoHQy~81{cW8C z+eObi(3|W;V`^D_wAQNX?%yfjS9?<}4P}Q*Y0tS{?U`~AB|!?MZhPOMJ=;kd5#P72 z1^vs{vNWugsIb7^541o3oM)tE&CY9^q(AlQcvvl%uv&~E=(acWW3?x9?ymiqw&M1@ zu3Niht!shr2K|J1daX<1Rz5Pfav4*NOl_hv8b>C{Qt)frlQ?&mw0D>I-^MR1j48z( zVY0y9(uVf0kNWb}ZBNGLE@LA9KlN`#L+#aqTJ^A`T9+}SwRY6W_~(!J#fI8j z(P}Zje|F7u$c)Lyl}cQ7Ro(V-d(_@(P66MY{p+^ZUiTMo{OE_*uiNO>?5x`H`e=yr zJ3?oPolaX)y#fJ*{#?Fx(}iq=uO{_ed<>}QtJDyGN&njGst}CUOU54^O@p!h+iTsM z_GoUwmoaJ&i_6No`?rYwbM_X!u020VqQF%BN+9#vZErE{ox+|h{%`Che!kmYf0w=f zH)t=LNM5slL$v4247tJr&uN7*I^KBn>b%r+_ircdx$*9N9eew^O|QD=fu09?9_V?X z=YgIFdLHO`fF6+FWQXH$I)?+6oKf+!*Yeaml}{$ml2?i$8@{UK%f zy(#kHi|FaqkJ-X7(d*h z=Dn9ZvPpRjdG1o>A+m?(Iii0Bxp}#AnLNPxu9F9G+86y@cWRKABiOZnsE zku@rBklpi|XPy3l%70JpOO#)7{C?$E9SwUaNc?dEjB?dtLiUSTiJn%{7+(GKEVLX74`}L8h+5gkX9_6da$(^ddjyyvDT;lX8zmhyd zE|7B^PePvNd`vp|_tgH)W2N6C#Rw0(m-NPe1}yG!NIkw?C${Acnk z{j--mMg4u`=})QtAxqSMGrN_SlZU^g+)p03PWc@2$mf-Z$dlJAZza#&pj;*=H!AOR z?Z2#i1KFd!-Hz{8`80We{Ge-3{-KlOIhV};FUZMeOZgmflf04aaXnt;+MlZW+g$r^E02?B?^nK_-2A%o zt>oNI%6B_`@(g+Evnt<1_CBZlEV;>e`4c&Jv'C&>rk!L5vckoo5b;Y0DdVUOw` zO?g5$!C(UC$A>oD!j<^Mn0tdyN^7$P5BA( z^a|yt$OGKJenoCxpz;^VBabNmgFJh@@?xAN=yD2^}ptr`{NU?{YBdTr{qEA z-{;69C6)h;+$0}>*bsjVd{^afCg+Y)K8D;_t^98Cp3a^kCe3wdNjIUr9ne#gk(=_=pl^iNja?d0s= zT~1DZh&)+V{U^!E`N~hb_ObHw=ein`eqU))&)ufDuc*~O^>!8^jtRDw#JPFTHkK@D~CWnb-5qs5fNYNr8<`Eq~} zRfCd;*GzTXXgp2}7##*w@uMito6H~eOt2%&Ofify>A8hUSPg4<85*t3V(ZEU^-);M z%>IOaTB@~$xSJi+%5j~{D&7Q}D69r6(G^oEKCL7exV?(vv^xjg<>tU zRhYLiaREARg6fzVPs1z|myXua^{{I4m?~Ee^5wXLstA*o2&3(!Bu+cnPPkL8R}lyB zopoapCV>gkG)5n^W_vx(@K%OY3o2nAuR&WXVT2ClBSfb`_?fJn#_)hv*s%dBcBH9a zw7$>B)y&68l6r>eK;XEFG_WC?kCO=l=VCOr*oyB?GKpsjF_wdE65y?y38JuQqBw@c z7SU@AD~M`=tK|&PAjah8L`L0-X^^CGKB(371|1@ML(7P!Rse~m#17xirgho;I@?4h z!TE6lPCzW9om66~?X-(SOf^QJB9diMVx39^B1Ql<7g)#GBFCYzV{2^hOeEt*JW7O( z){Abbic2Nps1JD-hgNZPXOJS0(1bzYr+!7*POOBnMafdd$S+|uP}ZE~R6%XM*p%an z%L(vQ(y|!VtOaWTK8;L0GHd z#Uy)>#i}dPR#K{E)<4LG)()IzgVq7EXv|SV@zN~#gu~66fNAc=7 z)UAVMvr1xGTdR~wTFkZksYOICcMfu37mWrgtF{HY`v9x?O6$JWjy_1aeHTf-lCX8p zQNm7UyQI{yr)fpo?c^ZM2UzMQ9f($<106Q%G^rbbgi}de$uHf(!vM2@YT3gOxLF+o zD=|A@rMUD_!e7oHb)*RC5;i|;Do(J!NP?5P1g&HI7h+aG9m&3gr8qCO%j#x^Van*P zksK^_+F3~rVbzaZwh~ELz}V&d!3-vKt&LF|Q_@P^*pp$=W>ZhHg4?C?WxLaK)WFrS zK2J%j%qm-%uVbu87-(WQ3Gq`U$q)l5F-5zQU8q*T9R&iLk1!sMtagQ66@|6|95=Qh z%=IRc8r*0jzh1?Wt!o5bwQdydsG%EQ1sfy|Z|;DCzwZ%Koi&I8+0l8v!xZSbVLo%? zlQUjR!`)C$kUUk|MQVdVkC2{?40yn9Qo1RiuDvVT8Smg$M@37{dO8X%>lWuE-0*at zRt4;}m=~wu)~(iZ1elffc|mtM=1vPiKC@@k6i3XlKt0hew`{ae)Hsr~j@XPq9A=qh-79f8`Zpyv(598RN*BFQw8QIJy^M)qcw8D5@7OSlv3 zQ-|K=c6&V2IiLi;fO}WZ13eG)Jkaw%&jbID9@wyXt-Q3hPiv)rc;IC(ty|*l!}Y)D YET +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/03 11:18:29 by frthierr #+# #+# */ -/* Updated: 2020/08/10 14:18:32 by frthierr ### ########.fr */ +/* Updated: 2020/08/18 10:12:01 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -80,6 +80,7 @@ static int handle_deleted_dir(char *arg) return (1); if (modify_path(new_dir, "PWD=")) return (1); + free(new_dir); return (0); } diff --git a/srcs/builtins/builtin_exit.c b/srcs/builtins/builtin_exit.c index e18ed3c..7d4c493 100644 --- a/srcs/builtins/builtin_exit.c +++ b/srcs/builtins/builtin_exit.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* builtin_exit.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: franciszer +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/03 11:30:42 by frthierr #+# #+# */ -/* Updated: 2020/08/11 18:57:54 by franciszer ### ########.fr */ +/* Updated: 2020/08/18 09:47:25 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -20,17 +20,19 @@ int builtin_exit(char **args) ft_putendl_fd("exit", 2); while (args[i]) i++; - if (i > 2) + if (g_env_modified) + free_argv(g_env, INT_MAX); + if (args[1] && (!ft_is_strdigit(args[1]) || ft_strlen(args[1]) > 10)) + { + ft_perror("numeric argument required"); + g_exit_status = 255; + } + else if (i > 2) { g_exit_status = 1; ft_perror(ERR_TOO_MANY_ARGS); return (1); } - else if (args[1] && (!ft_is_strdigit(args[1]) || ft_strlen(args[1]) > 10)) - { - ft_perror("numeric argument required"); - g_exit_status = 255; - } else if (args[1]) g_exit_status = ft_atoi(args[1]); exit_minishell(EXIT_NOW, NULL, NULL, NULL); diff --git a/srcs/builtins/builtin_export.c b/srcs/builtins/builtin_export.c index fce5bca..11e0495 100644 --- a/srcs/builtins/builtin_export.c +++ b/srcs/builtins/builtin_export.c @@ -6,7 +6,7 @@ /* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/03 15:25:27 by frthierr #+# #+# */ -/* Updated: 2020/08/13 18:30:54 by frthierr ### ########.fr */ +/* Updated: 2020/08/21 15:51:36 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/builtins/builtin_export3.c b/srcs/builtins/builtin_export3.c index bc84599..e138c88 100644 --- a/srcs/builtins/builtin_export3.c +++ b/srcs/builtins/builtin_export3.c @@ -3,15 +3,101 @@ /* ::: :::::::: */ /* builtin_export3.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: franciszer +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/08/10 13:58:47 by frthierr #+# #+# */ -/* Updated: 2020/08/11 19:06:52 by franciszer ### ########.fr */ +/* Updated: 2020/08/22 12:55:02 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" +char *remove_plus_sign(char *arg) +{ + char *new_arg; + size_t i; + size_t j; + + i = 0; + j = 0; + if (!(new_arg = malloc(sizeof(char) * (ft_strlen(arg) + 1)))) + return (NULL); + while (arg[i]) + { + if (arg[i] != '+') + new_arg[j++] = arg[i++]; + else + i++; + } + return (new_arg); +} + + +t_list *replance_envvar_init_vals(int *replaced) +{ + t_list *env_list; + + if (!(env_list = ft_argv_to_list(g_env))) + return (NULL); + *replaced = 0; + if (g_env_modified) + free_argv(g_env, INT_MAX); + g_env_modified = 1; + return (env_list); +} + +int replace_envvar_util(t_list *nav, char *arg) +{ + char *current_env; + size_t len; + + current_env = (char*)nav->content; + len = ft_strlen(current_env); + if (current_env[len - 1] != '=' &&\ + !ft_strncmp(current_env, arg, ft_strlen(current_env))) + { + free(nav->content); + if (!(nav->content = ft_strdup(arg))) + return (-1); + return (1); + } + return (0); +} + + +int replace_envvar(char *arg) +{ + t_list *env_list; + t_list *nav; + char *current_env; + int replaced; + char *new_arg; + + if (!ft_strchr(arg, '=') && (current_env = get_env(arg))) + { + free(current_env); + return (1); + } + if (!(new_arg = remove_plus_sign(arg))) + return (0); + if (!(env_list = replance_envvar_init_vals(&replaced))) + return (0); + nav = env_list; + while (nav && !replaced) + { + if ((replaced = replace_envvar_util(nav, new_arg)) == -1) + return (0); + nav = nav->next; + } + if (!(g_env = list_to_argv(env_list))) + return (0); + ft_lstclear(&env_list, free); + free(new_arg); + if (replaced) + return (1); + return (0); +} + int export_envvar(int i, char **argv) { char *var; @@ -19,6 +105,8 @@ int export_envvar(int i, char **argv) int return_value; char *to_free; + if (replace_envvar(argv[i])) + return (0); if ((syntax_check = export_check_syntax(argv[i])) == 1) return (1); if (syntax_check == 3 && !(argv[i] = added_var(argv[i]))) diff --git a/srcs/builtins/builtin_pwd.c b/srcs/builtins/builtin_pwd.c index c54532f..8e2ab5e 100644 --- a/srcs/builtins/builtin_pwd.c +++ b/srcs/builtins/builtin_pwd.c @@ -6,20 +6,19 @@ /* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/03 13:56:49 by frthierr #+# #+# */ -/* Updated: 2020/08/11 16:30:25 by frthierr ### ########.fr */ +/* Updated: 2020/08/17 12:54:43 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" - -static char *set_new_pwd(void) +static char *set_new_pwd(void) { char *pwd; char **new_pwd; if (!(pwd = getcwd(NULL, 0))) - return (NULL); + return (NULL); if (!(new_pwd = malloc(sizeof(char*) * 3))) return (NULL); if (!(new_pwd[0] = ft_strdup("export"))) @@ -36,9 +35,10 @@ int builtin_pwd(void) { char *pwd; - if (!(pwd = get_env("PWD")) && !(pwd = set_new_pwd())) + if (!(pwd = get_env("PWD"))) { - return (1); + if (!(pwd = set_new_pwd())) + return (1); } ft_putendl_fd(pwd, STDOUT_FILENO); free(pwd); diff --git a/srcs/builtins/builtin_unset.c b/srcs/builtins/builtin_unset.c index 411929c..d05d520 100644 --- a/srcs/builtins/builtin_unset.c +++ b/srcs/builtins/builtin_unset.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* builtin_unset.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: franciszer +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/05 11:40:02 by franciszer #+# #+# */ -/* Updated: 2020/08/11 19:15:39 by franciszer ### ########.fr */ +/* Updated: 2020/08/17 12:45:36 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -88,7 +88,7 @@ int builtin_unset(char **argv) { int i; int ret_value; - + ret_value = 0; i = 1; while (argv[i]) diff --git a/srcs/commands/search_path.c b/srcs/commands/search_path.c index 6cd6c06..5b6c8e0 100644 --- a/srcs/commands/search_path.c +++ b/srcs/commands/search_path.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* search_path.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/02 14:02:44 by frthierr #+# #+# */ -/* Updated: 2020/08/08 13:48:29 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/18 09:25:05 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -74,8 +74,8 @@ char *search_path(char *command) if (is_custom(command)) return (ft_strdup(command)); - if (!(path = get_env("PATH")) - || !(path_array = ft_split(path, ':'))) + if (!(path = get_env("PATH")) ||\ + !(path_array = ft_split(path, ':'))) return (NULL); i = 0; while (path_array[i]) @@ -88,8 +88,7 @@ char *search_path(char *command) i++; } if (open(command, O_CLOEXEC) != -1) - return (ft_strdup(command)); - if ((command_path = search_relativepath(command))) - return (command_path); - return (return_free_av(NULL, &path_array, &path)); + return (return_free_av(ft_strdup(command), &path_array, &path)); + command_path = search_relativepath(command); + return (return_free_av(command_path, &path_array, &path)); } diff --git a/srcs/launch_commands/command_utils.c b/srcs/launch_commands/command_utils.c index 620773f..99fd197 100644 --- a/srcs/launch_commands/command_utils.c +++ b/srcs/launch_commands/command_utils.c @@ -6,7 +6,7 @@ /* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/02 16:21:03 by frthierr #+# #+# */ -/* Updated: 2020/08/11 15:41:21 by frthierr ### ########.fr */ +/* Updated: 2020/08/17 12:46:06 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -65,6 +65,5 @@ void exit_minishell(int action, t_list *token_list, if (args_to_free) free_argv(*args_to_free, INT_MAX); } - system("minishell leaks"); exit(g_exit_status); } diff --git a/srcs/main.c b/srcs/main.c index f3e7332..ee57a45 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/24 13:39:32 by frthierr #+# #+# */ -/* Updated: 2020/08/11 16:42:19 by frthierr ### ########.fr */ +/* Updated: 2020/08/17 12:40:19 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,7 +49,7 @@ int main(int argc, char **argv, char **env) g_in_fork = 0; if (argc > 1 || argv[1]) { - ft_perror(ERR_TOO_MANY_ARGS); + ft_perror("ERR_TOO_MANY_ARGS"); return (1); } g_env = env; diff --git a/srcs/parsing/parsing_utils.c b/srcs/parsing/parsing_utils.c index 8c3e267..047d637 100644 --- a/srcs/parsing/parsing_utils.c +++ b/srcs/parsing/parsing_utils.c @@ -6,7 +6,7 @@ /* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/25 14:28:17 by frthierr #+# #+# */ -/* Updated: 2020/08/11 14:30:48 by frthierr ### ########.fr */ +/* Updated: 2020/08/17 16:39:36 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/parsing/prompt_loop.c b/srcs/parsing/prompt_loop.c index 23475a2..7a54cc2 100644 --- a/srcs/parsing/prompt_loop.c +++ b/srcs/parsing/prompt_loop.c @@ -73,10 +73,7 @@ int check_semicol_error(t_list *token_list) if (!ft_strncmp((char*)tmp->content, ";", 2)) { if (prev_is_semicol) - { - printf("here\n"); return (g_semicol_error = 1); - } else prev_is_semicol = 1; } diff --git a/srcs/parsing/token_len.c b/srcs/parsing/token_len.c index 8d4e89a..04c8732 100644 --- a/srcs/parsing/token_len.c +++ b/srcs/parsing/token_len.c @@ -3,41 +3,54 @@ /* ::: :::::::: */ /* token_len.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/25 14:27:21 by frthierr #+# #+# */ -/* Updated: 2020/08/16 11:22:57 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/17 14:16:03 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" -size_t ftoken_len(char *tk) +static int set_values(int *i, int *pb, int *qt_q, int *qt_dq) +{ + *i = 0; + *pb = 0; + *qt_q = -1; + *qt_dq = -1; + return (0); +} + +static void set_values_2(char *tk_i, int *qt_q, int *qt_dq, int pb) +{ + *tk_i == '\"' && *qt_q == -1 && !pb ? *qt_dq *= -1 : 0; + *tk_i == '\'' && *qt_dq == -1 && (!pb || *qt_q == 1) ? *qt_q *= -1 : 0; +} + +static int return_i_or_len(int i, size_t len) +{ + if (i == 0) + return (len); + return (i); +} + +size_t ftoken_len(char *tk) { int i; int pb; t_quotes qt; size_t len; - i = 0; - pb = 0; - qt.q = -1; - qt.dq = -1; - len = 0; + len = set_values(&i, &pb, &qt.q, &qt.dq); while (tk[i]) { - tk[i] == '\"' && qt.q == -1 && !pb ? qt.dq *= -1 : 0; - tk[i] == '\'' && qt.dq == -1 && (!pb || qt.q == 1) ? qt.q *= -1 : 0; + set_values_2(&tk[i], &qt.q, &qt.dq, pb); if (qt.q == -1 && qt.dq == -1 && !pb) { if (tk[i] == ' ') - return(i); - if ((len = token_len_special(&tk[i]))) - { - if (i == 0) - return (len); return (i); - } + if ((len = token_len_special(&tk[i]))) + return (return_i_or_len(i, len)); } if (tk[i] == '\\' && pb == 0 && tk[i + 1] && qt.q == -1 && ++i) pb = 1; @@ -47,10 +60,10 @@ size_t ftoken_len(char *tk) pb = 0; } } - return (i); + return (i); } -size_t token_len_special(char *tok_s) +size_t token_len_special(char *tok_s) { if (tok_s[0] == '>' && tok_s[1] && tok_s[1] == '>') return (2); diff --git a/srcs/signals/signal_handlers.c b/srcs/signals/signal_handlers.c index 3dd3eb1..2ca0d23 100644 --- a/srcs/signals/signal_handlers.c +++ b/srcs/signals/signal_handlers.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* signal_handlers.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/06 15:10:26 by frthierr #+# #+# */ -/* Updated: 2020/08/16 11:06:06 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/17 16:43:08 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -35,6 +35,7 @@ void sigint_handler(int sig) { if (!g_man) { + g_exit_status = 1; ft_printf("\n"); print_prompt(); } diff --git a/srcs/token_expansion/expand_tokens.c b/srcs/token_expansion/expand_tokens.c index 100120e..b31d34d 100644 --- a/srcs/token_expansion/expand_tokens.c +++ b/srcs/token_expansion/expand_tokens.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* expand_tokens.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/06/30 11:57:50 by frthierr #+# #+# */ -/* Updated: 2020/08/16 11:06:28 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/17 14:57:46 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -27,13 +27,8 @@ char *expand_token_quote(char *tk, t_expand_tk_dt d) { int check_quote; - check_quote = 0; - if ((d.final_token = quoted_redir(tk))) - return (d.final_token); - if (is_quote_only(tk)) - check_quote = 1; - if (!(d.final_token = init_expand(&d.qt, &d.ij, &d.pb, tk))) - return (return_token(NULL, check_quote)); + if (!expand_quote_set_vals(tk, &d, &check_quote)) + return (!d.is_err ? d.final_token : return_token(NULL, check_quote)); while (tk[d.ij.a]) { tk[d.ij.a] == '\'' && d.qt.dq == -1 && (!d.pb || d.qt.q == 1) @@ -54,8 +49,7 @@ char *expand_token_quote(char *tk, t_expand_tk_dt d) else if (!(d.pb = 0)) else_loop(tk, &d.final_token, &d.ij, &d.qt); } - d.final_token[d.ij.b] = '\0'; - return (return_token(&d.final_token, check_quote)); + return (return_expand_tk_quote(&d, check_quote)); } void *get_final_token(void *content) diff --git a/srcs/token_expansion/expand_tokens_utils.c b/srcs/token_expansion/expand_tokens_utils.c index b0ff8f4..c97e570 100644 --- a/srcs/token_expansion/expand_tokens_utils.c +++ b/srcs/token_expansion/expand_tokens_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* expand_tokens_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/22 19:23:52 by qfeuilla #+# #+# */ -/* Updated: 2020/07/24 22:40:24 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/17 14:57:52 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/token_expansion/get_env.c b/srcs/token_expansion/get_env.c index 3ba80fb..c4b376a 100644 --- a/srcs/token_expansion/get_env.c +++ b/srcs/token_expansion/get_env.c @@ -37,7 +37,8 @@ char *preprocess_env(char *env_val) preproc_env = (char *)malloc((ft_strlen(env_val) + 1) * sizeof(char)); while (env_val[++i]) { - if (!(env_val[i] == ' ' && prev_is_space == 1)) + if (!(env_val[i] == ' ' && prev_is_space == 1) + && !(env_val[i] == ' ' && i == 0)) preproc_env[j++] = env_val[i]; if (env_val[i] == ' ') prev_is_space = 1; diff --git a/srcs/token_expansion/token_expansion_utils.c b/srcs/token_expansion/token_expansion_utils.c index 030620b..30d3396 100644 --- a/srcs/token_expansion/token_expansion_utils.c +++ b/srcs/token_expansion/token_expansion_utils.c @@ -3,10 +3,10 @@ /* ::: :::::::: */ /* token_expansion_utils.c :+: :+: :+: */ /* +:+ +:+ +:+ */ -/* By: qfeuilla +#+ +:+ +#+ */ +/* By: frthierr +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/07/01 15:04:43 by frthierr #+# #+# */ -/* Updated: 2020/08/16 11:06:56 by qfeuilla ### ########.fr */ +/* Updated: 2020/08/17 14:58:03 by frthierr ### ########.fr */ /* */ /* ************************************************************************** */ @@ -58,3 +58,27 @@ char *quoted_redir(char *tk) return (ft_strdup("\33\127<")); return (NULL); } + +int expand_quote_set_vals(char *tk, t_expand_tk_dt *d, int *check_quote) +{ + *check_quote = 0; + if ((d->final_token = quoted_redir(tk))) + { + d->is_err = 0; + return (0); + } + if (is_quote_only(tk)) + *check_quote = 1; + if (!(d->final_token = init_expand(&d->qt, &d->ij, &d->pb, tk))) + { + d->is_err = 1; + return (0); + } + return (1); +} + +char *return_expand_tk_quote(t_expand_tk_dt *d, int check_quote) +{ + d->final_token[d->ij.b] = '\0'; + return (return_token(&d->final_token, check_quote)); +}