norme part 1
This commit is contained in:
parent
d44a1b5e44
commit
3abc8c5738
@ -3,38 +3,15 @@
|
||||
/* ::: :::::::: */
|
||||
/* cd.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: syd <syd@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/03/21 18:30:26 by sadjigui #+# #+# */
|
||||
/* Updated: 2022/04/19 13:15:09 by apommier ### ########.fr */
|
||||
/* Updated: 2022/04/19 16:56:35 by syd ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../../includes/minishell.h"
|
||||
|
||||
void del_one(t_s_cmd *cmd)
|
||||
{
|
||||
int i;
|
||||
int j;
|
||||
char *r;
|
||||
|
||||
if (find_it(cmd->big_cmd->env, "PWD") != -1)
|
||||
{
|
||||
j = find_it(cmd->big_cmd->env, "PWD");
|
||||
i = ft_strlen(cmd->big_cmd->env[j]);
|
||||
while (cmd->big_cmd->env[j][i] && cmd->big_cmd->env[j][i] != '/')
|
||||
i--;
|
||||
r = ft_substr(cmd->big_cmd->env[j], 0, i);
|
||||
free (cmd->big_cmd->env[j]);
|
||||
if (r)
|
||||
cmd->big_cmd->env[j] = ft_strdup(r);
|
||||
else
|
||||
cmd->big_cmd->env[j] = ft_strdup("PWD=/");
|
||||
if (r)
|
||||
free(r);
|
||||
}
|
||||
}
|
||||
|
||||
void add_one(t_s_cmd *cmd)
|
||||
{
|
||||
char p[1024];
|
||||
@ -62,65 +39,36 @@ void change_path(t_s_cmd *cmd)
|
||||
add_one(cmd);
|
||||
}
|
||||
|
||||
void reboot_pwd(t_s_cmd *cmd, int i)
|
||||
{
|
||||
char *str;
|
||||
|
||||
while (i > 3)
|
||||
{
|
||||
if (chdir("..") == 0)
|
||||
del_one(cmd);
|
||||
i--;
|
||||
}
|
||||
str = ft_substr(cmd->args[1], 2, ft_strlen(cmd->args[1]));
|
||||
cmd->args[1] = ft_strdup(str);
|
||||
free(str);
|
||||
}
|
||||
|
||||
void check_home(t_s_cmd *cmd, char *p)
|
||||
void check_home(char *p, char **env)
|
||||
{
|
||||
int home;
|
||||
int len_home;
|
||||
int old_pwd;
|
||||
int pwd;
|
||||
|
||||
home = find_it(cmd->big_cmd->env, "HOME");
|
||||
len_home = ft_strlen(cmd->big_cmd->env[home]);
|
||||
old_pwd = find_it(cmd->big_cmd->env, "OLDPWD");
|
||||
pwd = find_it(cmd->big_cmd->env, "PWD");
|
||||
p = ft_substr(cmd->big_cmd->env[home], 5, ft_strlen(cmd->big_cmd->env[len_home]));
|
||||
home = find_it(env, "HOME");
|
||||
len_home = ft_strlen(env[home]);
|
||||
old_pwd = find_it(env, "OLDPWD");
|
||||
pwd = find_it(env, "PWD");
|
||||
p = ft_substr(env[home], 5, ft_strlen(env[len_home]));
|
||||
if (chdir(p) == 0)
|
||||
{
|
||||
if (find_it(cmd->big_cmd->env, "PWD") != -1)
|
||||
if (find_it(env, "PWD") != -1)
|
||||
{
|
||||
if (find_it(cmd->big_cmd->env, "OLDPWD") != -1)
|
||||
cmd->big_cmd->env[old_pwd] = ft_strjoin("OLD", cmd->big_cmd->env[pwd]);
|
||||
cmd->big_cmd->env[pwd] = ft_strjoin("PWD=", p);
|
||||
if (find_it(env, "OLDPWD") != -1)
|
||||
{
|
||||
free(env[old_pwd]);
|
||||
env[old_pwd] = ft_strjoin("OLD", env[pwd]);
|
||||
}
|
||||
free(env[pwd]);
|
||||
env[pwd] = ft_strjoin("PWD=", p);
|
||||
}
|
||||
}
|
||||
free(p);
|
||||
}
|
||||
|
||||
int open_directory(t_s_cmd *cmd)
|
||||
int check_dir(t_s_cmd *cmd)
|
||||
{
|
||||
char *p;
|
||||
int j;
|
||||
|
||||
p = NULL;
|
||||
if (find_it(cmd->big_cmd->env, "PWD") != -1)
|
||||
j = size_path(cmd->big_cmd->env);
|
||||
if (cmd->nb_args > 2)
|
||||
return (cd_error(cmd, "Minishell: cd: too many arguments", 1));
|
||||
if (!cmd->args[1])
|
||||
{
|
||||
if (find_it(cmd->big_cmd->env, "HOME") < 0)
|
||||
return (cd_error(cmd, "Minishell: cd: HOME not set", 1));
|
||||
check_home(cmd, 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") != -1)
|
||||
@ -133,6 +81,28 @@ int open_directory(t_s_cmd *cmd)
|
||||
ft_putstr_fd(": No such directory\n", 2);
|
||||
return (check_return(cmd, 1));
|
||||
}
|
||||
}
|
||||
return (check_return(cmd, 0));
|
||||
}
|
||||
|
||||
int open_directory(t_s_cmd *cmd)
|
||||
{
|
||||
char *p;
|
||||
int j;
|
||||
int i;
|
||||
|
||||
p = NULL;
|
||||
i = 0;
|
||||
if (find_it(cmd->big_cmd->env, "PWD") != -1)
|
||||
j = size_path(cmd->big_cmd->env);
|
||||
if (cmd->nb_args > 2)
|
||||
return (cd_error(cmd, "Minishell: cd: too many arguments", 1));
|
||||
if (!cmd->args[1])
|
||||
{
|
||||
if (find_it(cmd->big_cmd->env, "HOME") < 0)
|
||||
return (cd_error(cmd, "Minishell: cd: HOME not set", 1));
|
||||
check_home(p, cmd->big_cmd->env);
|
||||
}
|
||||
else if (cmd->nb_args == 2)
|
||||
i = check_dir(cmd);
|
||||
return (check_return(cmd, i));
|
||||
}
|
||||
|
||||
@ -3,15 +3,26 @@
|
||||
/* ::: :::::::: */
|
||||
/* echo.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
|
||||
/* By: syd <syd@student.42.fr> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/03/11 20:52:56 by sadjigui #+# #+# */
|
||||
/* Updated: 2022/04/19 13:19:31 by apommier ### ########.fr */
|
||||
/* Updated: 2022/04/19 17:09:24 by syd ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "../../includes/minishell.h"
|
||||
|
||||
void echo_print(t_s_cmd *d, int i)
|
||||
{
|
||||
while (d->args[i])
|
||||
{
|
||||
printf("%s", d->args[i]);
|
||||
if (d->args[i + 1] != NULL)
|
||||
printf(" ");
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
int ft_echo(t_s_cmd *d)
|
||||
{
|
||||
int i;
|
||||
@ -32,15 +43,7 @@ int ft_echo(t_s_cmd *d)
|
||||
i++;
|
||||
}
|
||||
if (d->args[i])
|
||||
{
|
||||
while (d->args[i])
|
||||
{
|
||||
printf("%s", d->args[i]);
|
||||
if (d->args[i + 1] != NULL)
|
||||
printf(" ");
|
||||
i++;
|
||||
}
|
||||
}
|
||||
echo_print(d, i);
|
||||
if (is_option == 0)
|
||||
printf("\n");
|
||||
return (check_return(d, 0));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user