fix cd and find_it

This commit is contained in:
kinou-p 2022-04-11 17:51:36 +02:00
parent c9125238a0
commit 64071b0127
7 changed files with 81 additions and 38 deletions

View File

@ -6,7 +6,7 @@
# By: apommier <apommier@student.42.fr> +#+ +:+ +#+ # # By: apommier <apommier@student.42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/03/06 12:50:24 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/init_builtin.c\
srcs/built_in/export2.c\ srcs/built_in/export2.c\
srcs/built_in/env.c\ srcs/built_in/env.c\
srcs/set_quote/set_quote.c\
srcs/set_quote/split_with_quote.c\ srcs/set_quote/split_with_quote.c\
srcs/built_in/choose_builtin.c srcs/built_in/choose_builtin.c
# srcs/set_quote/set_quote.c\
OBJS = ${SRCS:.c=.o} OBJS = ${SRCS:.c=.o}
CC = clang CC = clang
CFLAGS = -Wall -Wextra -g CFLAGS = -Wall -Wextra -g

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/09 22:33:49 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); int find_len(char *input, int i, char c);
void lone_export(t_s_cmd *cmd); void lone_export(t_s_cmd *cmd);
void find_variable(char *variable, t_s_cmd *cmd); void find_variable(char *variable, t_s_cmd *cmd);
int find_it(char **str, char *s);
//real builtin //real builtin
void print_env(char **tab); void print_env(char **tab);

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/21 18:30:26 by sadjigui #+# #+# */ /* 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; int i;
char *r; 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]); // 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++; // 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--; 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); // 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) 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 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) if (r)
free(r); free(r);
@ -74,10 +74,10 @@ void add_one(t_s_cmd *cmd, char *str)
{ {
char *r; 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); r = ft_strjoin(r, str);
//free(cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD=")]); //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); cmd->big_cmd->env[find_it(cmd->big_cmd->env, "PWD")] = ft_strdup(r);
free(r); free(r);
} }
@ -97,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_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; i = 0;
while (tab[i]) while (tab[i])
{ {
@ -133,10 +133,10 @@ int find_it(char **str, char *s)
int i; int i;
i = 0; 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++; i++;
if (str[i] == NULL) if (str[i] == NULL)
return (0); return (-1);
return (i); return (i);
} }
@ -145,13 +145,13 @@ void open_directory(t_s_cmd *cmd)
char **str; char **str;
int j; 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); j = double_size(str);
free_double(str); free_double(str);
} }
if (cmd->args[2]) if (cmd->nb_args > 2)
{ {
printf("Minishell: cd: too many arguments\n"); printf("Minishell: cd: too many arguments\n");
cmd->big_cmd->err_var = 1; cmd->big_cmd->err_var = 1;
@ -159,19 +159,19 @@ void open_directory(t_s_cmd *cmd)
} }
if (!cmd->args[1]) 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"); printf("Minishell: cd: HOME not set\n");
cmd->big_cmd->err_var = 1; cmd->big_cmd->err_var = 1;
return ; 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); printf("%s\n", p);
if (chdir(p) == 0) 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, "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, "PWD")] = ft_strjoin("PWD=", p);
} }
free(p); free(p);
} }
@ -181,7 +181,7 @@ void open_directory(t_s_cmd *cmd)
reboot_pwd(cmd, j); reboot_pwd(cmd, j);
if (chdir(cmd->args[1]) == 0) 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); change_path(cmd);
} }
else else

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/06 13:27:11 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) if (ft_strlen(input) && next_space(input, 0) && input)
{ {
cmd = set_cmd(input, path); cmd = set_cmd(input, path);
if (cmd) if (cmd)
{ {

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/02 18:51:31 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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/03/08 15:19:42 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; char **cmds;
cmds = ft_split_with_quote(input, '|'); cmds = ft_split_with_quote(input, '|');
printf("-after split | -\n"); //print_double_fd(cmds, 1);
print_double_fd(cmds, 1);
if (!cmds) if (!cmds)
return (0); return (0);
cmd = malloc(sizeof(t_cmd)); cmd = malloc(sizeof(t_cmd));
if (!cmd) if (!cmd)
return (0); 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) if (!cmd->s_cmds)
return (0); return (0);
cmd->path = 0; cmd->path = 0;
cmd->s_cmds[double_size(cmds)] = 0; //cmd->s_cmds[double_size(cmds)] = NULL;
cmd->path = get_path(env); cmd->path = get_path(env);
cmd->env = env; cmd->env = env;
//set_quote_and_var; //set_quote_and_var;

View File

@ -6,7 +6,7 @@
/* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */ /* By: apommier <apommier@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/04/09 23:58:21 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); return (1);
} }
/*int parse_quote(char *str) void set_var(char *cmd)
{ {
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++;
}
}