fixed many malloc in prompt, chaged name history, added command to front of arg list so that its argv[0]
This commit is contained in:
parent
df6b7a41ae
commit
a1b064fdfc
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/11 15:50:21 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/02/12 10:59:38 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -38,5 +38,6 @@
|
||||
# define CYAN "\001\033[0;36m\002"
|
||||
# define RESET "\001\033[0m\002"
|
||||
# define PROMPT RESET "🐚" GREEN "minishell" RESET ": "
|
||||
# define PROMPT_LEN 51
|
||||
|
||||
#endif
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/04 16:35:35 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/05 17:05:32 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/02/12 12:54:01 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
|
||||
void print_banner(void);
|
||||
char *ft_prompt(t_minishell *minishell);
|
||||
void ft_write_history(char *line);
|
||||
void ft_load_history(void);
|
||||
void history_write(char *line);
|
||||
void history_load(void);
|
||||
|
||||
#endif // PROMPT_H
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/08 14:09:11 by willem ######## odam.nl */
|
||||
/* Updated: 2025/02/12 12:54:01 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -29,7 +29,7 @@ int main(int argc, char **argv, char **envp)
|
||||
(void)argc;
|
||||
(void)argv;
|
||||
print_banner();
|
||||
ft_load_history();
|
||||
history_load();
|
||||
minishell = init_minishell();
|
||||
environment_parse(envp, &(minishell->environment));
|
||||
while (TRUE)
|
||||
@ -38,7 +38,7 @@ int main(int argc, char **argv, char **envp)
|
||||
minishell->lexer = ft_lexer_new(minishell->line);
|
||||
minishell->tokens = ft_parse_input(minishell->lexer);
|
||||
ft_lstiter(minishell->tokens, token_print);
|
||||
// minishell->commands = parser_get_commands(minishell->tokens);
|
||||
minishell->commands = parser_get_commands(minishell->tokens);
|
||||
simple_builtins(minishell);
|
||||
free_minishell_line(minishell);
|
||||
ft_lstclear(&minishell->commands, free_command_list);
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* ::: :::::::: */
|
||||
/* parser_get_arguments.c :+: :+: :+: */
|
||||
/* +:+ +:+ +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* :::::::: */
|
||||
/* parser_get_arguments.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/11 16:20:09 by qmennen #+# #+# */
|
||||
/* Updated: 2025/02/11 16:26:41 by qmennen ### ########.fr */
|
||||
/* Updated: 2025/02/12 12:58:42 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -26,7 +26,7 @@ static int count_cmds(t_list *list)
|
||||
cmds++;
|
||||
current = current->next;
|
||||
}
|
||||
return (cmds - 1);
|
||||
return (cmds);
|
||||
}
|
||||
|
||||
char **parser_get_arguments(t_list *list)
|
||||
@ -43,7 +43,7 @@ char **parser_get_arguments(t_list *list)
|
||||
perror("malloc");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
current = list->next;
|
||||
current = list;
|
||||
i = -1;
|
||||
while ((++i) < cmds && current)
|
||||
{
|
||||
|
||||
@ -1,18 +1,18 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* ft_load_history.c :+: :+: */
|
||||
/* history_load.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/05 16:44:51 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/05 17:11:59 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/02/12 12:54:04 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "minishell.h"
|
||||
|
||||
void ft_load_history(void)
|
||||
void history_load(void)
|
||||
{
|
||||
int fd;
|
||||
char *line;
|
||||
@ -1,21 +1,22 @@
|
||||
/* ************************************************************************** */
|
||||
/* */
|
||||
/* :::::::: */
|
||||
/* ft_write_history.c :+: :+: */
|
||||
/* history_write.c :+: :+: */
|
||||
/* +:+ */
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/05 17:12:17 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/05 17:12:23 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/02/12 12:53:42 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
#include "minishell.h"
|
||||
|
||||
void ft_write_history(char *line)
|
||||
void history_write(char *line)
|
||||
{
|
||||
int fd;
|
||||
|
||||
add_history(line);
|
||||
fd = open(".minishell_history", O_WRONLY | O_APPEND | O_CREAT, 0644);
|
||||
if (fd < 0)
|
||||
return ;
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: qmennen <qmennen@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/04 16:13:08 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/11 16:06:17 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/02/12 12:53:38 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@ -25,7 +25,7 @@ char *get_user(t_list *environment)
|
||||
username = (char *)guest;
|
||||
else
|
||||
username = user->value;
|
||||
len = ft_strlen(username) + ft_strlen(PROMPT) + ft_strlen(GREEN) + 1;
|
||||
len = ft_strlen(username) + ft_strlen(PROMPT GREEN) + 1;
|
||||
result = (char *)malloc(len);
|
||||
if (result == NULL)
|
||||
{
|
||||
@ -38,30 +38,65 @@ char *get_user(t_list *environment)
|
||||
return (result);
|
||||
}
|
||||
|
||||
char *get_path(t_list *environment)
|
||||
int get_home_len(char *cwd, t_list *environment)
|
||||
{
|
||||
char *home;
|
||||
char *temp;
|
||||
t_environment *home;
|
||||
int home_len;
|
||||
|
||||
home = environment_get(environment, "HOME");
|
||||
home_len = 0;
|
||||
if (home && !ft_strncmp(cwd, home->value, ft_strlen(home->value)))
|
||||
home_len = ft_strlen(home->value) - 1;
|
||||
return (home_len);
|
||||
}
|
||||
|
||||
char *get_path_with_home(t_list *environment)
|
||||
{
|
||||
char *result;
|
||||
char *cwd;
|
||||
int len;
|
||||
int home_len;
|
||||
|
||||
cwd = getcwd(NULL, 0);
|
||||
home = environment_get(environment, "HOME")->value;
|
||||
if (cwd == NULL)
|
||||
return (perror("getcwd"), NULL);
|
||||
home_len = get_home_len(cwd, environment);
|
||||
len = ft_strlen(cwd) - home_len + 1;
|
||||
result = malloc(len);
|
||||
if (result == NULL)
|
||||
return (free(cwd), NULL);
|
||||
if (home_len)
|
||||
{
|
||||
perror("getcwd");
|
||||
ft_strlcpy(result, "~", 2);
|
||||
ft_strlcat(result, cwd + home_len + 1, len);
|
||||
}
|
||||
else
|
||||
ft_strlcpy(result, cwd, len);
|
||||
free(cwd);
|
||||
return (result);
|
||||
}
|
||||
|
||||
char *get_path(t_list *environment)
|
||||
{
|
||||
char *result;
|
||||
char *cwd;
|
||||
int len;
|
||||
|
||||
cwd = get_path_with_home(environment);
|
||||
if (cwd == NULL)
|
||||
return (NULL);
|
||||
}
|
||||
if (home && ft_strncmp(cwd, home, ft_strlen(home)) == 0)
|
||||
len = ft_strlen(cwd) + ft_strlen(BLUE RESET "> ") + 1;
|
||||
result = malloc(len);
|
||||
if (result == NULL)
|
||||
{
|
||||
temp = ft_strjoin("~", cwd + ft_strlen(home));
|
||||
free(cwd);
|
||||
cwd = temp;
|
||||
perror("malloc");
|
||||
return (free(cwd), NULL);
|
||||
}
|
||||
temp = ft_strjoin(BLUE, cwd);
|
||||
ft_strlcpy(result, BLUE, len);
|
||||
ft_strlcat(result, cwd, len);
|
||||
ft_strlcat(result, RESET "> ", len);
|
||||
free(cwd);
|
||||
cwd = ft_strjoin(temp, RESET);
|
||||
free(temp);
|
||||
return (cwd);
|
||||
return (result);
|
||||
}
|
||||
|
||||
char *ft_prompt(t_minishell *minishell)
|
||||
@ -70,23 +105,25 @@ char *ft_prompt(t_minishell *minishell)
|
||||
char *cwd;
|
||||
char *prompt;
|
||||
char *user;
|
||||
char *temp;
|
||||
|
||||
cwd = get_path(minishell->environment);
|
||||
if (cwd == NULL)
|
||||
return (NULL);
|
||||
user = get_user(minishell->environment);
|
||||
temp = ft_strjoin(user, cwd);
|
||||
if (user == NULL)
|
||||
return (free(cwd), NULL);
|
||||
prompt = ft_strjoin(user, cwd);
|
||||
if (prompt == NULL)
|
||||
{
|
||||
perror("malloc");
|
||||
return (free(cwd), free(user), NULL);
|
||||
}
|
||||
free(user);
|
||||
free(cwd);
|
||||
prompt = ft_strjoin(temp, "> ");
|
||||
free(temp);
|
||||
line = readline(prompt);
|
||||
free(prompt);
|
||||
if (line != NULL)
|
||||
{
|
||||
add_history(line);
|
||||
ft_write_history(line);
|
||||
}
|
||||
if (line == NULL)
|
||||
return (NULL);
|
||||
history_write(line);
|
||||
return (line);
|
||||
}
|
||||
|
||||
@ -6,7 +6,7 @@
|
||||
/* By: whaffman <whaffman@student.codam.nl> +#+ */
|
||||
/* +#+ */
|
||||
/* Created: 2025/02/05 16:21:39 by whaffman #+# #+# */
|
||||
/* Updated: 2025/02/11 17:11:16 by whaffman ######## odam.nl */
|
||||
/* Updated: 2025/02/12 12:52:30 by whaffman ######## odam.nl */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user