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> +#+ */
/* +#+ */
/* 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

View File

@ -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

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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 ;

View File

@ -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);
}

View File

@ -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 */
/* */
/* ************************************************************************** */