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:
whaffman 2025-02-12 13:00:51 +01:00
parent df6b7a41ae
commit a1b064fdfc
8 changed files with 90 additions and 51 deletions

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/04 16:13:13 by whaffman #+# #+# */ /* 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 CYAN "\001\033[0;36m\002"
# define RESET "\001\033[0m\002" # define RESET "\001\033[0m\002"
# define PROMPT RESET "🐚" GREEN "minishell" RESET ": " # define PROMPT RESET "🐚" GREEN "minishell" RESET ": "
# define PROMPT_LEN 51
#endif #endif

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/04 16:35:35 by whaffman #+# #+# */ /* 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); void print_banner(void);
char *ft_prompt(t_minishell *minishell); char *ft_prompt(t_minishell *minishell);
void ft_write_history(char *line); void history_write(char *line);
void ft_load_history(void); void history_load(void);
#endif // PROMPT_H #endif // PROMPT_H

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/04 16:19:22 by whaffman #+# #+# */ /* 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)argc;
(void)argv; (void)argv;
print_banner(); print_banner();
ft_load_history(); history_load();
minishell = init_minishell(); minishell = init_minishell();
environment_parse(envp, &(minishell->environment)); environment_parse(envp, &(minishell->environment));
while (TRUE) while (TRUE)
@ -38,7 +38,7 @@ int main(int argc, char **argv, char **envp)
minishell->lexer = ft_lexer_new(minishell->line); minishell->lexer = ft_lexer_new(minishell->line);
minishell->tokens = ft_parse_input(minishell->lexer); minishell->tokens = ft_parse_input(minishell->lexer);
ft_lstiter(minishell->tokens, token_print); ft_lstiter(minishell->tokens, token_print);
// minishell->commands = parser_get_commands(minishell->tokens); minishell->commands = parser_get_commands(minishell->tokens);
simple_builtins(minishell); simple_builtins(minishell);
free_minishell_line(minishell); free_minishell_line(minishell);
ft_lstclear(&minishell->commands, free_command_list); ft_lstclear(&minishell->commands, free_command_list);

View File

@ -1,12 +1,12 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* ::: :::::::: */ /* :::::::: */
/* parser_get_arguments.c :+: :+: :+: */ /* parser_get_arguments.c :+: :+: */
/* +:+ +:+ +:+ */ /* +:+ */
/* By: qmennen <qmennen@student.codam.nl> +#+ +:+ +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+ */
/* Created: 2025/02/11 16:20:09 by qmennen #+# #+# */ /* 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++; cmds++;
current = current->next; current = current->next;
} }
return (cmds - 1); return (cmds);
} }
char **parser_get_arguments(t_list *list) char **parser_get_arguments(t_list *list)
@ -43,7 +43,7 @@ char **parser_get_arguments(t_list *list)
perror("malloc"); perror("malloc");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
current = list->next; current = list;
i = -1; i = -1;
while ((++i) < cmds && current) while ((++i) < cmds && current)
{ {

View File

@ -1,18 +1,18 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* :::::::: */ /* :::::::: */
/* ft_load_history.c :+: :+: */ /* history_load.c :+: :+: */
/* +:+ */ /* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/05 16:44:51 by whaffman #+# #+# */ /* 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" #include "minishell.h"
void ft_load_history(void) void history_load(void)
{ {
int fd; int fd;
char *line; char *line;

View File

@ -1,21 +1,22 @@
/* ************************************************************************** */ /* ************************************************************************** */
/* */ /* */
/* :::::::: */ /* :::::::: */
/* ft_write_history.c :+: :+: */ /* history_write.c :+: :+: */
/* +:+ */ /* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/05 17:12:17 by whaffman #+# #+# */ /* 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" #include "minishell.h"
void ft_write_history(char *line) void history_write(char *line)
{ {
int fd; int fd;
add_history(line);
fd = open(".minishell_history", O_WRONLY | O_APPEND | O_CREAT, 0644); fd = open(".minishell_history", O_WRONLY | O_APPEND | O_CREAT, 0644);
if (fd < 0) if (fd < 0)
return ; return ;

View File

@ -6,7 +6,7 @@
/* By: qmennen <qmennen@student.codam.nl> +#+ */ /* By: qmennen <qmennen@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/04 16:13:08 by whaffman #+# #+# */ /* 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; username = (char *)guest;
else else
username = user->value; 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); result = (char *)malloc(len);
if (result == NULL) if (result == NULL)
{ {
@ -38,30 +38,65 @@ char *get_user(t_list *environment)
return (result); return (result);
} }
char *get_path(t_list *environment) int get_home_len(char *cwd, t_list *environment)
{ {
char *home; t_environment *home;
char *temp; int home_len;
char *cwd;
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); cwd = getcwd(NULL, 0);
home = environment_get(environment, "HOME")->value;
if (cwd == NULL) 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);
return (NULL); ft_strlcat(result, cwd + home_len + 1, len);
} }
if (home && ft_strncmp(cwd, home, ft_strlen(home)) == 0) else
{ ft_strlcpy(result, cwd, len);
temp = ft_strjoin("~", cwd + ft_strlen(home));
free(cwd);
cwd = temp;
}
temp = ft_strjoin(BLUE, cwd);
free(cwd); free(cwd);
cwd = ft_strjoin(temp, RESET); return (result);
free(temp); }
return (cwd);
char *get_path(t_list *environment)
{
char *result;
char *cwd;
int len;
cwd = get_path_with_home(environment);
if (cwd == NULL)
return (NULL);
len = ft_strlen(cwd) + ft_strlen(BLUE RESET "> ") + 1;
result = malloc(len);
if (result == NULL)
{
perror("malloc");
return (free(cwd), NULL);
}
ft_strlcpy(result, BLUE, len);
ft_strlcat(result, cwd, len);
ft_strlcat(result, RESET "> ", len);
free(cwd);
return (result);
} }
char *ft_prompt(t_minishell *minishell) char *ft_prompt(t_minishell *minishell)
@ -70,23 +105,25 @@ char *ft_prompt(t_minishell *minishell)
char *cwd; char *cwd;
char *prompt; char *prompt;
char *user; char *user;
char *temp;
cwd = get_path(minishell->environment); cwd = get_path(minishell->environment);
if (cwd == NULL) if (cwd == NULL)
return (NULL); return (NULL);
user = get_user(minishell->environment); 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(user);
free(cwd); free(cwd);
prompt = ft_strjoin(temp, "> ");
free(temp);
line = readline(prompt); line = readline(prompt);
free(prompt); free(prompt);
if (line != NULL) if (line == NULL)
{ return (NULL);
add_history(line); history_write(line);
ft_write_history(line);
}
return (line); return (line);
} }

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/02/05 16:21:39 by whaffman #+# #+# */ /* 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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */