From d6cd561d9133c68c2c28322e405e3f233282f263 Mon Sep 17 00:00:00 2001 From: PrStein Date: Wed, 13 Apr 2022 01:42:34 +0200 Subject: [PATCH] return --- includes/minishell.h | 3 +- srcs/built_in/cd.c | 68 +++++++++-------------------------- srcs/built_in/env.c | 7 ++-- srcs/built_in/export.c | 25 ++++++------- srcs/built_in/export2.c | 23 +++++------- srcs/built_in/unset.c | 43 +++++++++------------- srcs/built_in/utils_builtin.c | 13 +++++++ 7 files changed, 71 insertions(+), 111 deletions(-) diff --git a/includes/minishell.h b/includes/minishell.h index 11ddfe3..eaed2c0 100644 --- a/includes/minishell.h +++ b/includes/minishell.h @@ -62,6 +62,7 @@ typedef struct s_command { //main.c int main();//int ac, char **av, char **path); +char **ft_dup_double(char **env); //pipe.c void execute(t_cmd *cmd, char **env); @@ -97,7 +98,7 @@ void init_s_cmd(t_s_cmd *cmd, char **env); 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_variable(char *variable, t_s_cmd *cmd); int find_it(char **str, char *s); int check_variable(char *variable); diff --git a/srcs/built_in/cd.c b/srcs/built_in/cd.c index c65363a..5816608 100644 --- a/srcs/built_in/cd.c +++ b/srcs/built_in/cd.c @@ -20,22 +20,14 @@ void ft_ls(char *input) struct dirent *sd; i = ft_strlen("ls"); - // if (input[i] == ' ') - // { - //printf("ici\n"); - while (input[i] && input[i] != ' ') - i++; - // } - // printf("[%c]\n", input[i]); - // printf("[%c]\n", input[i+1]); - + while (input[i] && input[i] != ' ') + i++; dir = opendir("."); if (dir == NULL) { printf("stop\n"); return ; } - // printf("dir --> %s\n", dir[0]); while ((sd=readdir(dir)) != NULL) { printf(" >> %s\n", sd->d_name); @@ -52,14 +44,9 @@ void del_one(t_s_cmd *cmd) { 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]) - // 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); - // printf ("-->%s\n", r); - // 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); else @@ -73,12 +60,14 @@ void del_one(t_s_cmd *cmd) void add_one(t_s_cmd *cmd, char *str) { char *r; + char *s; - r = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], "/"); - r = ft_strjoin(r, str); + s = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")], "/"); + r = ft_strjoin(s, 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(r); + free(s); } void change_path(t_s_cmd *cmd) @@ -86,29 +75,22 @@ void change_path(t_s_cmd *cmd) char **tab; int i; - i = 0; tab = ft_split(cmd->args[1], '/'); - while (cmd->big_cmd->env[i]) - { - if (ft_strncmp(cmd->big_cmd->env[i], "OLDPWD=", 7) == 0) - break ; - i++; - } - // printf("%d\n", i); - /*if (cmd->big_cmd->env[i]) - free(cmd->big_cmd->env[i]);*/ + i = find_it(cmd->big_cmd->env, "OLDPWD"); + // while (cmd->big_cmd->env[i]) + // { + // if (ft_strncmp(cmd->big_cmd->env[i], "OLDPWD=", 7) == 0) + // break ; + // i++; + // } cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")]); i = 0; while (tab[i]) { - // printf("%d -> %s\n", tab_len(tab), tab[i]); - // if (tab_len(tab) < 2) - // break ; if (ft_strcmp(tab[i], "..") == 0) del_one(cmd); else add_one(cmd, tab[i]); - i++; } if (tab) @@ -130,18 +112,6 @@ void reboot_pwd(t_s_cmd *cmd, int i) free(str); } -int find_it(char **str, char *s) -{ - int i; - - i = 0; - 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 (-1); - return (i); -} - void open_directory(t_s_cmd *cmd) { char **str; @@ -156,20 +126,17 @@ void open_directory(t_s_cmd *cmd) if (cmd->nb_args > 2) { printf("Minishell: cd: too many arguments\n"); - cmd->big_cmd->err_var = 1; - return ; + // return (1); } if (!cmd->args[1]) { if (find_it(cmd->big_cmd->env, "HOME") < 0) { - // printf("---->%s\n", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME")]); printf("Minishell: cd: HOME not set\n"); cmd->big_cmd->err_var = 1; - return ; + // return (1); } 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") != -1) { @@ -185,17 +152,14 @@ void open_directory(t_s_cmd *cmd) if (chdir(cmd->args[1]) == 0) { if (find_it(cmd->big_cmd->env, "PWD") != -1) - { change_path(cmd); - - } } else { ft_putstr_fd("Minishell: cd: ", 2); ft_putstr_fd(cmd->args[1], 2); ft_putstr_fd(": No such directory\n", 2); - cmd->big_cmd->err_var = 1; + // return (1); } } } diff --git a/srcs/built_in/env.c b/srcs/built_in/env.c index 2b210ee..64a9a61 100644 --- a/srcs/built_in/env.c +++ b/srcs/built_in/env.c @@ -22,7 +22,7 @@ void print_env(t_cmd *cmd) ft_putstr_fd("Minishell: env: '", 2); ft_putstr_fd(cmd->current_s_cmd->args[1], 2); ft_putstr_fd("': No such file or directory\n", 2); - // 127 + // return (127); } else if (cmd->env) { @@ -33,10 +33,12 @@ void print_env(t_cmd *cmd) i++; } } + // return (0); } void ft_pwd(t_s_cmd *cmd) { + (void)cmd; int i; char p[1024]; char *str; @@ -45,9 +47,10 @@ void ft_pwd(t_s_cmd *cmd) str = getcwd(p, sizeof(p)); if (!str) { - cmd->big_cmd->err_var = 1; ft_putstr_fd("Minishell: pwd: Not found\n", 2); + // return (1); } else ft_putendl_fd(p, 1); + // return (0); } \ No newline at end of file diff --git a/srcs/built_in/export.c b/srcs/built_in/export.c index a8a01ad..f66362a 100644 --- a/srcs/built_in/export.c +++ b/srcs/built_in/export.c @@ -49,52 +49,47 @@ int check_variable(char *variable) // return (dest); // } -void ft_export_variable(t_s_cmd *cmd, char *variable) +int ft_export_variable(t_s_cmd *cmd, char *variable) { char *dest; char *unset; - int i; - i = 0; if (check_variable(variable) == 1) { ft_putstr_fd("Minishell: export: `", 2); ft_putstr_fd(variable, 2); ft_putstr_fd("': not a valid identifier\n", 2); - // 1 - return ; + return (1); } - // dest = check_value(variable); dest = ft_strdup(variable); unset = ft_substr(dest, 0, find_len(dest, 0, '=')); - while (cmd->big_cmd->env[i] != NULL) + if (find_it(cmd->big_cmd->env, unset) != -1) { - if (ft_strncmp(unset, cmd->big_cmd->env[i], ft_strlen(unset)) == 0) - { - free(cmd->big_cmd->env[i]); - cmd->big_cmd->env[i] = dest; - return ; - } - i++; + cmd->big_cmd->env[find_it(cmd->big_cmd->env, unset)] = dest; + free(unset); + return (0); } register_env(cmd, dest); if (dest) free(dest); if (unset) free(unset); + return (0); } void ft_export(t_s_cmd *cmd) { int i; + int j; i = 1; + j = 0; if (!cmd->args[i]) lone_export(cmd); else if (cmd->args[i]) while (cmd->args[i]) { - ft_export_variable(cmd, cmd->args[i]); + j = ft_export_variable(cmd, cmd->args[i]); i++; } } diff --git a/srcs/built_in/export2.c b/srcs/built_in/export2.c index ffc5cc4..c71a63c 100644 --- a/srcs/built_in/export2.c +++ b/srcs/built_in/export2.c @@ -27,21 +27,17 @@ void sort_tab(char **av) int x; i = 0; - // if (ac > 1) - // { - while (av[i]) + while (av[i]) + { + x = i; + while (av[x]) { - x = i; - while (av[x]) - { - if (ft_strcmp(av[i], av[x]) > 0) - ft_swap(&av[i], &av[x]); - x++; - } - i++; + if (ft_strcmp(av[i], av[x]) > 0) + ft_swap(&av[i], &av[x]); + x++; } - // } - // return (av); + i++; + } } void print_export(char *tmp) @@ -66,7 +62,6 @@ void print_export(char *tmp) void lone_export(t_s_cmd *cmd) { char **tmp; - int i; i = 0; diff --git a/srcs/built_in/unset.c b/srcs/built_in/unset.c index e7dec68..fac4579 100644 --- a/srcs/built_in/unset.c +++ b/srcs/built_in/unset.c @@ -23,12 +23,8 @@ void unset_variable(t_s_cmd *cmd, int i) tmp = malloc(sizeof(char *) * tab_len(cmd->big_cmd->env)); if (!tmp) printf("no tmp\n"); - //ft_exit(cmd); while (cmd->big_cmd->env[a]) { - // if (a == i) - // a++; - // printf("%s\n", cmd->big_cmd->env[a]); if (a != i) { tmp[b] = ft_substr(cmd->big_cmd->env[a], 0, ft_strlen(cmd->big_cmd->env[a])); @@ -39,58 +35,51 @@ void unset_variable(t_s_cmd *cmd, int i) tmp[b] = NULL; free_double(cmd->big_cmd->env); a = 0; - cmd->big_cmd->env = malloc(sizeof(char *) * (tab_len(tmp) + 1)); + // cmd->big_cmd->env = malloc(sizeof(char *) * (tab_len(tmp) + 1)); if (!cmd->big_cmd->env) printf("no env\n"); - //ft_exit(cmd); - while (tmp[a]) - { - cmd->big_cmd->env[a] = ft_strdup(tmp[a]); - // printf("%s\n", cmd->big_cmd->env[a]); - a++; - } - cmd->big_cmd->env[a] = NULL; + cmd->big_cmd->env = ft_dup_double(tmp); + // while (tmp[a]) + // { + // cmd->big_cmd->env[a] = ft_strdup(tmp[a]); + // a++; + // } + // cmd->big_cmd->env[a] = NULL; if (tmp) free_double(tmp); - - } -void find_variable(char *variable, t_s_cmd *cmd) +int find_variable(char *variable, t_s_cmd *cmd) { - // char *str; int i; int j; i = find_it(cmd->big_cmd->env, variable); - // str = ft_strjoin(variable, "="); j = 0; if (check_variable(variable) == 1) { ft_putstr_fd("Minishell: unset: `", 2); ft_putstr_fd(variable, 2); ft_putstr_fd("': not a valid identifier\n", 2); - // 2 - return ; + return (2); } - // while (str[j]) - // j++; - // while (cmd->big_cmd->env[i] && !(ft_strncmp(cmd->big_cmd->env[i], str, j) == 0)) - // i++; if (i == tab_len(cmd->big_cmd->env)) - return ; + return (2); unset_variable(cmd, i); - // free(str); + return (0); } void ft_unset(t_s_cmd *cmd) { int i; + int j; i = 1; + j = 0; while (cmd->args[i]) { - find_variable(cmd->args[i], cmd); + j = find_variable(cmd->args[i], cmd); i++; } + // return (j); } diff --git a/srcs/built_in/utils_builtin.c b/srcs/built_in/utils_builtin.c index e89b682..df4cd1a 100644 --- a/srcs/built_in/utils_builtin.c +++ b/srcs/built_in/utils_builtin.c @@ -21,3 +21,16 @@ int find_len(char *input, int i, char c) j++; return (j); } + + +int find_it(char **str, char *s) +{ + int i; + + i = 0; + 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 (-1); + return (i); +}