From 64071b0127a05d2589fe93d98588761a9e3da63b Mon Sep 17 00:00:00 2001 From: kinou-p Date: Mon, 11 Apr 2022 17:51:36 +0200 Subject: [PATCH] fix cd and find_it --- Makefile | 6 +++-- includes/minishell.h | 3 ++- srcs/built_in/cd.c | 48 +++++++++++++++++++------------------- srcs/main.c | 3 ++- srcs/pipe/pipe.c | 2 +- srcs/set_cmd/set_cmd.c | 9 ++++--- srcs/set_quote/set_quote.c | 48 ++++++++++++++++++++++++++++++++++---- 7 files changed, 81 insertions(+), 38 deletions(-) diff --git a/Makefile b/Makefile index 791a3e0..2fbf9f1 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: apommier +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2022/03/06 12:50:24 by apommier #+# #+# # -# Updated: 2022/04/10 21:11:14 by apommier ### ########.fr # +# Updated: 2022/04/11 17:14:26 by apommier ### ########.fr # # # # **************************************************************************** # @@ -26,9 +26,11 @@ SRCS = srcs/main.c\ srcs/built_in/init_builtin.c\ srcs/built_in/export2.c\ srcs/built_in/env.c\ - srcs/set_quote/set_quote.c\ srcs/set_quote/split_with_quote.c\ srcs/built_in/choose_builtin.c +# srcs/set_quote/set_quote.c\ + + OBJS = ${SRCS:.c=.o} CC = clang CFLAGS = -Wall -Wextra -g diff --git a/includes/minishell.h b/includes/minishell.h index 5a71b23..5329ac7 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/09 22:33:49 by apommier #+# #+# */ -/* Updated: 2022/04/10 21:14:03 by apommier ### ########.fr */ +/* Updated: 2022/04/11 17:13:23 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -98,6 +98,7 @@ int tab_len(char **tab); int find_len(char *input, int i, char c); void lone_export(t_s_cmd *cmd); void find_variable(char *variable, t_s_cmd *cmd); +int find_it(char **str, char *s); //real builtin void print_env(char **tab); diff --git a/srcs/built_in/cd.c b/srcs/built_in/cd.c index 267f2c4..334b477 100644 --- a/srcs/built_in/cd.c +++ b/srcs/built_in/cd.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/21 18:30:26 by sadjigui #+# #+# */ -/* Updated: 2022/04/09 04:55:48 by apommier ### ########.fr */ +/* Updated: 2022/04/11 17:39:48 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -48,22 +48,22 @@ void del_one(t_s_cmd *cmd) int i; char *r; - if (find_it(cmd->big_cmd->env, "PWD=")) + if (find_it(cmd->big_cmd->env, "PWD")) { - i = ft_strlen(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]); + i = ft_strlen(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); // printf("%s\n", cmd->args[6]); - // while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")][i]) + // while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")][i]) // i++; - while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")][i] != '/') + while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")][i] != '/') i--; - r = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")], 0, i); + r = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], 0, i); // printf ("-->%s\n", r); - // free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]); + // free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); if (r) - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strdup(r); + cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup(r); else - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strdup("PWD=/"); + cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup("PWD=/"); if (r) free(r); @@ -74,10 +74,10 @@ void add_one(t_s_cmd *cmd, char *str) { char *r; - r = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")], "/"); + r = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], "/"); r = ft_strjoin(r, str); - //free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]); - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strdup(r); + //free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); + cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup(r); free(r); } @@ -97,7 +97,7 @@ void change_path(t_s_cmd *cmd) // printf("%d\n", i); /*if (cmd->big_cmd->env[i]) free(cmd->big_cmd->env[i]);*/ - cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]); + cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); i = 0; while (tab[i]) { @@ -133,10 +133,10 @@ int find_it(char **str, char *s) int i; i = 0; - while (str[i] && ft_strncmp(str[i], s, ft_strlen(s))) + while (str[i] && (ft_strncmp(str[i], s, ft_strlen(s)) || (!ft_strncmp(str[i], s, ft_strlen(s)) && (str[i][ft_strlen(s)] != '=' && str[i][ft_strlen(s)] != 0)))) i++; if (str[i] == NULL) - return (0); + return (-1); return (i); } @@ -145,13 +145,13 @@ void open_directory(t_s_cmd *cmd) char **str; int j; - if (find_it(cmd->big_cmd->env, "PWD=")) + if (find_it(cmd->big_cmd->env, "PWD")) { - str = ft_split(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")], '/'); + str = ft_split(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], '/'); j = double_size(str); free_double(str); } - if (cmd->args[2]) + if (cmd->nb_args > 2) { printf("Minishell: cd: too many arguments\n"); cmd->big_cmd->err_var = 1; @@ -159,19 +159,19 @@ void open_directory(t_s_cmd *cmd) } if (!cmd->args[1]) { - if (find_it(cmd->big_cmd->env, "HOME=") == 0) + if (find_it(cmd->big_cmd->env, "HOME") < 0) { printf("Minishell: cd: HOME not set\n"); cmd->big_cmd->err_var = 1; return ; } - char *p = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME=")], 5, ft_strlen(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME=")])); + char *p = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME")], 5, ft_strlen(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME")])); printf("%s\n", p); if (chdir(p) == 0) - if (find_it(cmd->big_cmd->env, "PWD=")) + if (find_it(cmd->big_cmd->env, "PWD")) { - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "OLDPWD=")] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]); - cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strjoin("PWD=", p); + cmd->big_cmd->env[find_it(cmd->big_cmd->env, "OLDPWD")] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); + cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strjoin("PWD=", p); } free(p); } @@ -181,7 +181,7 @@ void open_directory(t_s_cmd *cmd) reboot_pwd(cmd, j); if (chdir(cmd->args[1]) == 0) { - if (find_it(cmd->big_cmd->env, "PWD=")) + if (find_it(cmd->big_cmd->env, "PWD")) change_path(cmd); } else diff --git a/srcs/main.c b/srcs/main.c index 2e7327f..285e7e6 100644 --- a/srcs/main.c +++ b/srcs/main.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/06 13:27:11 by apommier #+# #+# */ -/* Updated: 2022/04/10 21:46:50 by apommier ### ########.fr */ +/* Updated: 2022/04/11 17:47:41 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -78,6 +78,7 @@ void print_prompt(char **path) } if (ft_strlen(input) && next_space(input, 0) && input) { + cmd = set_cmd(input, path); if (cmd) { diff --git a/srcs/pipe/pipe.c b/srcs/pipe/pipe.c index d74ea1b..fafb616 100644 --- a/srcs/pipe/pipe.c +++ b/srcs/pipe/pipe.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/02 18:51:31 by apommier #+# #+# */ -/* Updated: 2022/04/10 21:07:36 by apommier ### ########.fr */ +/* Updated: 2022/04/11 17:49:11 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/srcs/set_cmd/set_cmd.c b/srcs/set_cmd/set_cmd.c index 39653a1..aa949e9 100644 --- a/srcs/set_cmd/set_cmd.c +++ b/srcs/set_cmd/set_cmd.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/03/08 15:19:42 by apommier #+# #+# */ -/* Updated: 2022/04/10 21:45:17 by apommier ### ########.fr */ +/* Updated: 2022/04/11 17:49:06 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -82,18 +82,17 @@ t_cmd *set_cmd(char *input, char **env) char **cmds; cmds = ft_split_with_quote(input, '|'); - printf("-after split | -\n"); - print_double_fd(cmds, 1); + //print_double_fd(cmds, 1); if (!cmds) return (0); cmd = malloc(sizeof(t_cmd)); if (!cmd) return (0); - cmd->s_cmds = malloc(sizeof(t_s_cmd) * double_size(cmds) + 1); + cmd->s_cmds = calloc(sizeof(t_s_cmd), double_size(cmds) + 1); if (!cmd->s_cmds) return (0); cmd->path = 0; - cmd->s_cmds[double_size(cmds)] = 0; + //cmd->s_cmds[double_size(cmds)] = NULL; cmd->path = get_path(env); cmd->env = env; //set_quote_and_var; diff --git a/srcs/set_quote/set_quote.c b/srcs/set_quote/set_quote.c index 70c0120..6e784e8 100644 --- a/srcs/set_quote/set_quote.c +++ b/srcs/set_quote/set_quote.c @@ -6,7 +6,7 @@ /* By: apommier +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/04/09 23:58:21 by apommier #+# #+# */ -/* Updated: 2022/04/10 21:03:07 by apommier ### ########.fr */ +/* Updated: 2022/04/11 16:30:09 by apommier ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,7 +33,47 @@ int is_quote_even(char *str) return (1); } -/*int parse_quote(char *str) +void set_var(char *cmd) { - -}*/ \ No newline at end of file + int i; + int simple_quote; + int double_quote; + int first_open; + + i = 0; + first_open = 0; + simple_quote = 0; + double_quote = 0; + while (cmd[i]) + { + if (cmd[i] == '\'') + { + if (simple_quote) + simple_quote = 0; + else + simple_quote = 1; + } + else if (cmd[i] == '"') + { + if (double_quote) + double_quote = 0; + else + double_quote = 1; + } + else if (cmd[i] == '$' && !simple_quote) + i = change_var(cmd, i); + i++; + } +} + +int parse_quote(char **cmds) +{ + int i; + + i = 0; + while (cmds[i]) + { + set_var(cmds[i]); + i++; + } +} \ No newline at end of file