fix: "echo $" works

This commit is contained in:
Camille Chauvet 2023-03-22 14:59:19 +01:00
parent 72ff3ba134
commit b3d060874d
8 changed files with 19 additions and 14 deletions

BIN
.nfs00000000098c816100000162 Executable file

Binary file not shown.

View File

@ -4,5 +4,7 @@
# include "../libftx/libftx.h" # include "../libftx/libftx.h"
# include "../env/env.h" # include "../env/env.h"
# include "../utils/utils.h" # include "../utils/utils.h"
char *get_pwd(int fd); char *get_pwd(int fd);
#endif #endif

View File

@ -10,5 +10,6 @@ typedef struct s_data
int child_pid; int child_pid;
} t_data; } t_data;
t_data *ft_get_data(); t_data *ft_get_data(void);
#endif #endif

9
env/env_fill.c vendored
View File

@ -22,6 +22,8 @@ static char *ft_getkey(const char *str)
key = ft_strdup("$"); key = ft_strdup("$");
else if (ft_strncmp(str, "$?", 2) == 0) else if (ft_strncmp(str, "$?", 2) == 0)
key = ft_strdup("?"); key = ft_strdup("?");
if (str[1] == '\0')
key = ft_strdup("");
else else
{ {
i = 1; i = 1;
@ -42,12 +44,14 @@ static char *ft_getvalue(t_data *data, char *key)
value = ft_itoa(data->exit_code); value = ft_itoa(data->exit_code);
else if (ft_strcmp(key, "$") == 0) else if (ft_strcmp(key, "$") == 0)
value = ft_strdup("PID"); value = ft_strdup("PID");
else if (key[0] == '\0')
value = ft_strdup("$");
else else
{ {
value = get_value_by_key(key, data->env); value = get_value_by_key(key, data->env);
if (value == NULL) if (value == NULL)
value = ft_strdup(""); value = ft_strdup("");
else else
value = ft_strdup(value); value = ft_strdup(value);
} }
if (value == NULL) if (value == NULL)
@ -55,7 +59,8 @@ static char *ft_getvalue(t_data *data, char *key)
return (value); return (value);
} }
static char *ft_getvalue_by_str(t_data *data, const char *str, size_t *key_len) static char *ft_getvalue_by_str(t_data *data, const char *str,
size_t *key_len)
{ {
char *key; char *key;
char *value; char *value;

View File

@ -115,10 +115,8 @@ int ft_cmds_parser(t_data *data, const char *line)
} }
if (*data->cmds != NULL) if (*data->cmds != NULL)
{ {
if (((t_cmd *) (*data->cmds)->content)->fd_in[0] == -1) ft_add_fd(((t_cmd *)(*data->cmds)->content)->fd_in, 0);
((t_cmd *) (*data->cmds)->content)->fd_in[0] = 0; ft_add_fd(((t_cmd *)(ft_lstlast(*data->cmds))->content)->fd_out, 1);
if (((t_cmd *) (ft_lstlast(*data->cmds))->content)->fd_out[0] == -1)
(((t_cmd *) (ft_lstlast(*data->cmds))->content)->fd_out[0] = 1);
} }
ft_freer_tab_ultimate(1, tab); ft_freer_tab_ultimate(1, tab);
return (0); return (0);

View File

@ -4,6 +4,6 @@
# include "../cmd/cmd.h" # include "../cmd/cmd.h"
int ft_redirection(t_data *data, t_cmd *cmd, char *cmd_str); int ft_redirection(t_data *data, t_cmd *cmd, char *cmd_str);
int *ft_get_heredoc(); int *ft_get_heredoc(void);
#endif #endif

View File

@ -54,10 +54,10 @@ char *ft_get_executable_without_path(t_data *data, const char *name)
if (path == NULL) if (path == NULL)
{ {
ft_eprintf("minishell: malloc failed\n"); ft_eprintf("minishell: malloc failed\n");
break; break ;
} }
if (access(path, X_OK) == 0) if (access(path, X_OK) == 0)
break; break ;
free(path); free(path);
path = NULL; path = NULL;
i++; i++;
@ -74,7 +74,7 @@ char *ft_get_executable_without_path(t_data *data, const char *name)
char *ft_get_executable(t_data *data, const char *name) char *ft_get_executable(t_data *data, const char *name)
{ {
char *path; char *path;
if (name[0] == '.' || name[0] == '/') if (name[0] == '.' || name[0] == '/')
path = ft_get_executable_with_path(data, name); path = ft_get_executable_with_path(data, name);
else else

View File

@ -29,8 +29,7 @@ void ft_strshift(char *str, int shift);
char *ft_quote_remover(char *str); char *ft_quote_remover(char *str);
int ft_atoi_check(const char *nptr); int ft_atoi_check(const char *nptr);
char *ft_get_executable(t_data *data, const char *name); char *ft_get_executable(t_data *data, const char *name);
void ft_closer(int fds[2]); void ft_closer(int fds[2]);
void ft_add_fd(int fds[2], int fd); void ft_add_fd(int fds[2], int fd);
#endif #endif