This commit is contained in:
PrStein 2022-04-10 22:21:27 +02:00
parent 706a073e28
commit 467e46a948
2 changed files with 131 additions and 134 deletions

View File

@ -48,32 +48,36 @@ void del_one(t_s_cmd *cmd)
int i; int i;
char *r; char *r;
i = ft_strlen(cmd->big_cmd->env[find_pwd(cmd)]); if (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]); // printf("%s\n", cmd->args[6]);
// while (cmd->big_cmd->env[find_pwd(cmd)][i]) // while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")][i])
// i++; // i++;
while (cmd->big_cmd->env[find_pwd(cmd)][i] != '/') while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")][i] != '/')
i--; i--;
r = ft_substr(cmd->big_cmd->env[find_pwd(cmd)], 0, i); r = ft_substr(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")], 0, i);
// printf ("-->%s\n", r); // printf ("-->%s\n", r);
// free(cmd->big_cmd->env[find_pwd(cmd)]); // free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]);
if (r) if (r)
cmd->big_cmd->env[find_pwd(cmd)] = ft_strdup(r); cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strdup(r);
else else
cmd->big_cmd->env[find_pwd(cmd)] = ft_strdup("PWD=/"); cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strdup("PWD=/");
if (r) if (r)
free(r); free(r);
}
} }
void add_one(t_s_cmd *cmd, char *str) void add_one(t_s_cmd *cmd, char *str)
{ {
char *r; char *r;
r = ft_strjoin(cmd->big_cmd->env[find_pwd(cmd)], "/"); r = ft_strjoin(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")], "/");
r = ft_strjoin(r, str); r = ft_strjoin(r, str);
//free(cmd->big_cmd->env[find_pwd(cmd)]); //free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]);
cmd->big_cmd->env[find_pwd(cmd)] = ft_strdup(r); cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")] = ft_strdup(r);
free(r); free(r);
} }
@ -93,7 +97,7 @@ void change_path(t_s_cmd *cmd)
// printf("%d\n", i); // printf("%d\n", i);
/*if (cmd->big_cmd->env[i]) /*if (cmd->big_cmd->env[i])
free(cmd->big_cmd->env[i]);*/ free(cmd->big_cmd->env[i]);*/
cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_pwd(cmd)]); cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]);
i = 0; i = 0;
while (tab[i]) while (tab[i])
{ {
@ -141,75 +145,68 @@ void open_directory(t_s_cmd *cmd)
char **str; char **str;
int j; int j;
str = ft_split(cmd->big_cmd->env[find_pwd(cmd)], '/'); if (find_it(cmd->big_cmd->env, "PWD="))
// printf("jojo\n"); {
// printf("%s\n", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME=")]); 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->args[2])
{ {
printf("cd: too many arguments\n"); printf("Minishell: cd: too many arguments\n");
cmd->big_cmd->err_var = 1; cmd->big_cmd->err_var = 1;
return ; return ;
} }
if (find_it(cmd->big_cmd->env, "HOME=") == 0)
{
//printf("%d\n", tab_len(cmd->args[1]));
printf("bash: cd: HOME not set\n");
cmd->big_cmd->err_var = 1;
return ;
}
j = tab_len(str);
if (!cmd->args[1]) if (!cmd->args[1])
{ {
// reboot_pwd(cmd, j); if (find_it(cmd->big_cmd->env, "HOME=") == 0)
// if (tab_len(str) > 3) {
// { printf("Minishell: cd: HOME not set\n");
// while (j-- > 3) cmd->big_cmd->err_var = 1;
// if (chdir("..") == 0) return ;
// del_one(cmd); }
// }
// else
// {
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); printf("%s\n", p);
if (chdir(p) == 0) if (chdir(p) == 0)
{ 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_pwd(cmd)]); {
cmd->big_cmd->env[find_pwd(cmd)] = 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); free(p);
// printf("%s\n", p);
// }
} }
if (tab_len(cmd->args) == 2) if (tab_len(cmd->args) == 2)
{ {
if (cmd->args[1][0] == '~') if (cmd->args[1][0] == '~')
reboot_pwd(cmd, j); reboot_pwd(cmd, j);
if (chdir(cmd->args[1]) == 0) if (chdir(cmd->args[1]) == 0)
change_path(cmd); {
if (find_it(cmd->big_cmd->env, "PWD="))
change_path(cmd);
}
else else
{ {
printf("cd: %s: No such directory\n", cmd->args[1]); 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; cmd->big_cmd->err_var = 1;
} }
} }
if (str)
free_double(str);
} }
void ft_pwd(t_s_cmd *cmd) void ft_pwd(t_s_cmd *cmd)
{ {
int i; int i;
int j; char p[1024];
char *str;
j = 0; i = 1;
i = 0; str = getcwd(p, sizeof(p));
while (cmd->big_cmd->env[find_pwd(cmd)][j] != '=') if (!str)
j++;
j += 1;
while (cmd->big_cmd->env[find_pwd(cmd)][j])
{ {
write (1, &cmd->big_cmd->env[find_pwd(cmd)][j], 1); cmd->big_cmd->err_var = 1;
j++; ft_putstr_fd("Minishell: pwd: Not found\n", 2);
} }
write(1, "\n", 1); else
ft_putstr_fd(p, 1);
} }

View File

@ -12,32 +12,32 @@
#include "../../includes/minishell.h" #include "../../includes/minishell.h"
int jump_space(char *str, int i) // int jump_space(char *str, int i)
{ // {
int j; // int j;
j = i; // j = i;
while (str[j] == ' ') // while (str[j] == ' ')
j++; // j++;
return (j); // return (j);
} // }
void print_value(char *str, char *input) // void print_value(char *str, char *input)
{ // {
(void)input; // (void)input;
int i; // int i;
i = 0; // i = 0;
while (str[i] && str[i] != '=') // while (str[i] && str[i] != '=')
i++; // i++;
i++; // i++;
ft_putstr_fd(str + i, 0); // ft_putstr_fd(str + i, 0);
/*while (str[i]) // /*while (str[i])
{ // {
ft_putchar(str[i]); // ft_putchar(str[i]);
i++; // i++;
}*/ // }*/
} // }
// void print_rest(char *input, char *str, int j) // void print_rest(char *input, char *str, int j)
// { // {
@ -70,66 +70,66 @@ void print_value(char *str, char *input)
// return ; // return ;
// } // }
void find_for_print(t_s_cmd *cmd, char *input) // void find_for_print(t_s_cmd *cmd, char *input)
{ // {
char *str; // char *str;
// char *tmp; // // char *tmp;
int i; // int i;
int x; // int x;
i = 0; // i = 0;
// j = j + 1; // // j = j + 1;
// tmp = ft_substr(input, j, find_len(input, j, 32)); // // tmp = ft_substr(input, j, find_len(input, j, 32));
// printf("%c\n", input[j]); // // printf("%c\n", input[j]);
str = ft_strjoin(input, "="); // str = ft_strjoin(input, "=");
x = ft_strlen(str); // x = ft_strlen(str);
// printf("%d\n", x); // // printf("%d\n", x);
while (cmd->big_cmd->env[i]) // while (cmd->big_cmd->env[i])
{ // {
if (ft_strncmp(cmd->big_cmd->env[i], str, x) == 0) // if (ft_strncmp(cmd->big_cmd->env[i], str, x) == 0)
{ // {
// printf("%s\n", cmd->big_cmd->env[i]); // // printf("%s\n", cmd->big_cmd->env[i]);
break ; // break ;
} // }
i++; // i++;
} // }
if (cmd->big_cmd->env[i] != NULL) // if (cmd->big_cmd->env[i] != NULL)
{ // {
print_value(cmd->big_cmd->env[i], input); // print_value(cmd->big_cmd->env[i], input);
// print_rest(input, tmp, j); // // print_rest(input, tmp, j);
} // }
} // }
int dollar_or_not(char *str) // int dollar_or_not(char *str)
{ // {
int i; // int i;
i = 0; // i = 0;
while (str[i]) // while (str[i])
{ // {
if (str[i] == '$') // if (str[i] == '$')
return (1); // return (1);
i++; // i++;
} // }
return (0); // return (0);
} // }
void find_value(t_s_cmd *cmd, char *str) // void find_value(t_s_cmd *cmd, char *str)
{ // {
// int i; // // int i;
// // //
// i = 0; // // i = 0;
while (*str) // while (*str)
{ // {
if (*str == '$') // if (*str == '$')
break ; // break ;
printf("%c", *str); // printf("%c", *str);
str++; // str++;
} // }
str++; // str++;
find_for_print(cmd, str); // find_for_print(cmd, str);
} // }
void ft_echo(t_s_cmd *d) void ft_echo(t_s_cmd *d)
{ {
@ -156,10 +156,10 @@ void ft_echo(t_s_cmd *d)
if (d->args[i]) if (d->args[i])
while (d->args[i]) while (d->args[i])
{ {
if (dollar_or_not(d->args[i]) == 1) // if (dollar_or_not(d->args[i]) == 1)
find_value(d, d->args[i]); // find_value(d, d->args[i]);
else // else
printf("%s", d->args[i]); printf("%s", d->args[i]);
if (d->args[i + 1] != NULL) if (d->args[i + 1] != NULL)
printf(" "); printf(" ");
i++; i++;