Merge branch 'sadjigui'

This commit is contained in:
kinou-p 2022-04-10 22:22:25 +02:00
commit c9125238a0
2 changed files with 150 additions and 133 deletions

View File

@ -48,32 +48,36 @@ void del_one(t_s_cmd *cmd)
int i;
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]);
// while (cmd->big_cmd->env[find_pwd(cmd)][i])
// while (cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")][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--;
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);
// free(cmd->big_cmd->env[find_pwd(cmd)]);
// free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]);
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
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)
free(r);
}
}
void add_one(t_s_cmd *cmd, char *str)
{
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);
//free(cmd->big_cmd->env[find_pwd(cmd)]);
cmd->big_cmd->env[find_pwd(cmd)] = 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);
}
@ -93,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_pwd(cmd)]);
cmd->big_cmd->env[i] = ft_strjoin("OLD", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]);
i = 0;
while (tab[i])
{
@ -141,63 +145,68 @@ void open_directory(t_s_cmd *cmd)
char **str;
int j;
str = ft_split(cmd->big_cmd->env[find_pwd(cmd)], '/');
// printf("jojo\n");
// printf("%s\n", cmd->big_cmd->env[find_it(cmd->big_cmd->env, "HOME=")]);
if (find_it(cmd->big_cmd->env, "HOME=") == 0)
if (find_it(cmd->big_cmd->env, "PWD="))
{
//printf("%d\n", tab_len(cmd->args[1]));
printf("bash: cd: HOME not set\n");
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])
{
printf("Minishell: cd: too many arguments\n");
cmd->big_cmd->err_var = 1;
return ;
}
j = tab_len(str);
if (!cmd->args[1])
{
// reboot_pwd(cmd, j);
// if (tab_len(str) > 3)
// {
// while (j-- > 3)
// if (chdir("..") == 0)
// del_one(cmd);
// }
// else
// {
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=")]));
printf("%s\n", p);
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);
// printf("%s\n", p);
// }
}
if (tab_len(cmd->args) == 2)
{
if (cmd->args[1][0] == '~')
reboot_pwd(cmd, j);
if (chdir(cmd->args[1]) == 0)
{
if (find_it(cmd->big_cmd->env, "PWD="))
change_path(cmd);
}
if (str)
free_double(str);
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;
}
}
}
void ft_pwd(t_s_cmd *cmd)
{
int i;
int j;
char p[1024];
char *str;
j = 0;
i = 0;
while (cmd->big_cmd->env[find_pwd(cmd)][j] != '=')
j++;
j += 1;
while (cmd->big_cmd->env[find_pwd(cmd)][j])
i = 1;
str = getcwd(p, sizeof(p));
if (!str)
{
write (1, &cmd->big_cmd->env[find_pwd(cmd)][j], 1);
j++;
cmd->big_cmd->err_var = 1;
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"
int jump_space(char *str, int i)
{
int j;
// int jump_space(char *str, int i)
// {
// int j;
j = i;
while (str[j] == ' ')
j++;
return (j);
}
// j = i;
// while (str[j] == ' ')
// j++;
// return (j);
// }
void print_value(char *str, char *input)
{
(void)input;
int i;
// void print_value(char *str, char *input)
// {
// (void)input;
// int i;
i = 0;
while (str[i] && str[i] != '=')
i++;
i++;
ft_putstr_fd(str + i, 0);
/*while (str[i])
{
ft_putchar(str[i]);
i++;
}*/
}
// i = 0;
// while (str[i] && str[i] != '=')
// i++;
// i++;
// ft_putstr_fd(str + i, 0);
// /*while (str[i])
// {
// ft_putchar(str[i]);
// i++;
// }*/
// }
// void print_rest(char *input, char *str, int j)
// {
@ -70,90 +70,98 @@ void print_value(char *str, char *input)
// return ;
// }
void find_for_print(t_s_cmd *cmd, char *input)
{
char *str;
// char *tmp;
int i;
int x;
i = 0;
// j = j + 1;
// tmp = ft_substr(input, j, find_len(input, j, 32));
// printf("%c\n", input[j]);
str = ft_strjoin(input, "=");
x = ft_strlen(str);
// printf("%d\n", x);
while (cmd->big_cmd->env[i])
{
if (ft_strncmp(cmd->big_cmd->env[i], str, x) == 0)
{
// printf("%s\n", cmd->big_cmd->env[i]);
break ;
}
i++;
}
if (cmd->big_cmd->env[i] != NULL)
{
print_value(cmd->big_cmd->env[i], input);
// print_rest(input, tmp, j);
}
}
int dollar_or_not(char *str)
{
int i;
i = 0;
while (str[i])
{
if (str[i] == '$')
return (1);
i++;
}
return (0);
}
void find_value(t_s_cmd *cmd, char *str)
{
// void find_for_print(t_s_cmd *cmd, char *input)
// {
// char *str;
// // char *tmp;
// int i;
//
// int x;
// i = 0;
while (*str)
{
if (*str == '$')
break ;
printf("%c", *str);
str++;
}
str++;
find_for_print(cmd, str);
}
// // j = j + 1;
// // tmp = ft_substr(input, j, find_len(input, j, 32));
// // printf("%c\n", input[j]);
// str = ft_strjoin(input, "=");
// x = ft_strlen(str);
// // printf("%d\n", x);
// while (cmd->big_cmd->env[i])
// {
// if (ft_strncmp(cmd->big_cmd->env[i], str, x) == 0)
// {
// // printf("%s\n", cmd->big_cmd->env[i]);
// break ;
// }
// i++;
// }
// if (cmd->big_cmd->env[i] != NULL)
// {
// print_value(cmd->big_cmd->env[i], input);
// // print_rest(input, tmp, j);
// }
// }
// int dollar_or_not(char *str)
// {
// int i;
// i = 0;
// while (str[i])
// {
// if (str[i] == '$')
// return (1);
// i++;
// }
// return (0);
// }
// void find_value(t_s_cmd *cmd, char *str)
// {
// // int i;
// //
// // i = 0;
// while (*str)
// {
// if (*str == '$')
// break ;
// printf("%c", *str);
// str++;
// }
// str++;
// find_for_print(cmd, str);
// }
void ft_echo(t_s_cmd *d)
{
int i;
int j;
size_t j;
int is_option;
j = 0;
i = 1;
is_option = 0;
if (d->args[i] && ft_strcmp(d->args[i], "-n") == 0)
while (d->args[i] && d->args[i][0] == '-')
{
j = 1;
while (d->args[i][j] && d->args[i][j] == 'n')
j++;
// printf("---->%zu\n", j);
// printf("--->%zu\n", ft_strlen(d->args[i]));
if (j == ft_strlen(d->args[i]))
is_option = 1;
else
break ;
i++;
}
if (d->args[i])
while (d->args[i])
{
if (dollar_or_not(d->args[i]) == 1)
find_value(d, d->args[i]);
else
// if (dollar_or_not(d->args[i]) == 1)
// find_value(d, d->args[i]);
// else
printf("%s", d->args[i]);
if (d->args[i + 1] != NULL)
printf("\n");
printf(" ");
i++;
}
// else