Skip to content

Commit

Permalink
Merge pull request #43 from rick-morty-kh/bugs
Browse files Browse the repository at this point in the history
heredoc and signal bug fix
  • Loading branch information
med-ghali authored Feb 6, 2023
2 parents 9bedbc8 + 8e8765f commit 63542a9
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 12 deletions.
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ USERS = $(USER)
COMP = -L/goinfre/$(USERS)/.brew/opt/readline/lib
LINK = -I/goinfre/$(USERS)/.brew/opt/readline/include

SRCS = srcs/ft_close.c srcs/ft_dups.c srcs/ft_execve.c srcs/ft_fork.c srcs/ft_open.c srcs/ft_pipe.c srcs/ft_waits.c builtins/cd.c builtins/echo.c builtins/env.c builtins/export.c builtins/helpers.c builtins/pwd.c builtins/shell_exit.c builtins/unset.c builtins/utils.c execution/environment.c execution/execute.c execution/heredoc.c execution/misc.c execution/paths.c execution/shell.c execution/signals.c parsing/commands.c parsing/commands_list.c parsing/env.c parsing/expand.c parsing/expand_env.c parsing/free.c parsing/heredoc.c parsing/lexer.c parsing/operator.c parsing/parser.c parsing/parsing_utils.c parsing/token_list.c parsing/word_spliting.c utils/alpha.c utils/contains.c utils/fatal.c utils/ft_atoi.c utils/ft_calloc.c utils/ft_exit.c utils/ft_free.c utils/ft_itoa.c utils/ft_memcpy.c utils/ft_split.c utils/ft_strcmp.c utils/ft_strdup.c utils/ft_strjoins.c utils/ft_strlen.c utils/ft_substr.c utils/prints.c main.c
SRCS = srcs/ft_close.c srcs/ft_dups.c srcs/ft_execve.c srcs/ft_fork.c srcs/ft_open.c srcs/ft_pipe.c srcs/ft_waits.c builtins/cd.c builtins/echo.c builtins/env.c builtins/export.c builtins/helpers.c builtins/pwd.c builtins/shell_exit.c builtins/unset.c builtins/utils.c execution/environment.c execution/execute.c execution/heredoc.c execution/misc.c execution/paths.c execution/shell.c execution/signals.c parsing/commands.c parsing/commands_list.c parsing/env.c parsing/expand.c parsing/expand_env.c parsing/free.c parsing/heredoc.c parsing/lexer.c parsing/operator.c parsing/parser.c parsing/heredoc_expansion.c parsing/parsing_utils.c parsing/token_list.c parsing/word_spliting.c utils/alpha.c utils/contains.c utils/fatal.c utils/ft_atoi.c utils/ft_calloc.c utils/ft_exit.c utils/ft_free.c utils/ft_itoa.c utils/ft_memcpy.c utils/ft_split.c utils/ft_strcmp.c utils/ft_strdup.c utils/ft_strjoins.c utils/ft_strlen.c utils/ft_substr.c utils/prints.c main.c
SRCS_DIRS = $(dir $(SRCS))

BIN_DIR = bin/
Expand All @@ -22,11 +22,11 @@ NAME = minishell
all: $(NAME)

$(NAME): $(OBJS)
@$(CC) -L/goinfre/$(USERS)/.brew/opt/readline/lib -I/goinfre/$(USERS)/.brew/opt/readline/include -lreadline $(OBJS) -o $(NAME)
@$(CC) -g -L/goinfre/$(USERS)/.brew/opt/readline/lib -I/goinfre/$(USERS)/.brew/opt/readline/include -lreadline $(OBJS) -o $(NAME)

$(BIN_DIR)%.o: %.c $(INCLUDES)
@$(MKDIR) $(OBJS_DIRS)
$(CC) $(LINK) $(CFLAGS) -c $< -o $@
$(CC) $(LINK) $(CFLAGS) -c $< -g -o $@

clean:
@$(RM) $(BIN_DIR)
Expand Down
2 changes: 1 addition & 1 deletion builtins/echo.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ void echo(char **args, int fd)
ft_putstr_fd("\n", fd);
return ;
}
if (is_flag_n(args[i]))
while (args[i] && is_flag_n(args[i]))
{
new_line = FALSE;
i++;
Expand Down
3 changes: 3 additions & 0 deletions builtins/unset.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ int unset(char **args, int fd)
return (1);
}
if (!ft_strcmp(*args, "_"))
{
args++;
continue ;
}
pop_env(*args);
args++;
}
Expand Down
6 changes: 0 additions & 6 deletions execution/shell.c
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,3 @@ void shell_loop(void)
free(line);
}
}

void set_exit_status(int sig)
{
(void)sig;
ft_putchar_fd('\n', 1);
}
2 changes: 1 addition & 1 deletion execution/signals.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ void ignore_signals(void)
struct sigaction sa_sigint;
struct sigaction sa_sigquit;

sa_sigint.sa_handler = &set_exit_status;
sa_sigint.sa_handler = SIG_IGN;
sa_sigquit.sa_handler = SIG_IGN;
sigaction(SIGINT, &sa_sigint, NULL);
sigaction(SIGQUIT, &sa_sigquit, NULL);
Expand Down
2 changes: 2 additions & 0 deletions includes/parsing.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,7 @@ void free_token_word(t_token *token, char *word);
void check_and_redirect(int *inf_out, int fd);
void free_all(t_token *tokens);
int handle_heredocs(t_cmd *cmd, t_token *tokens);
int get_name_len(char *token, int i);
char *heredoc_expansion(char *line);

#endif // PARSING_H
2 changes: 1 addition & 1 deletion parsing/heredoc.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ int handle_heredoc(t_cmd *cmd, char *limiter, char *file)
while (line && ft_strcmp(line, limiter))
{
if (expand_mode && *line)
line = parameter_expansion(line);
line = heredoc_expansion(line);
joined_line = ft_strjoin(line, "\n");
write(fd, joined_line, ft_strlen(joined_line));
free(line);
Expand Down
96 changes: 96 additions & 0 deletions parsing/heredoc_expansion.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* heredoc_expansion.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: mtagemou <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/02/06 12:59:34 by mtagemou #+# #+# */
/* Updated: 2023/02/06 12:59:36 by mtagemou ### ########.fr */
/* */
/* ************************************************************************** */

#include "minishell.h"

char *get_name_here(char *token)
{
int i;
int name_len;

i = 0;
name_len = -1;
while (token[i])
{
name_len = -1;
if (token[i] == '$')
name_len = get_name_len(token, i);
if (name_len == 0)
token[i] = -1;
if (name_len > 0)
break ;
i++;
}
if (name_len == 0 || name_len == -1)
return (NULL);
return (ft_substr(token, i, i + name_len));
}

int replace_before_name_here(char *new_token, char *token)
{
int i;

i = 0;
while (token[i] != '$')
{
new_token[i] = token[i];
i++;
}
return (i);
}

char *replace_name_value_here(char *token, char *name, char *value)
{
char *new_token;
int i;
int j;
int k;

i = 0;
j = 0;
new_token = ft_calloc(ft_strlen(token)
+ (ft_strlen(value) - ft_strlen(name)) + 1);
i = replace_before_name_here(new_token, token);
k = i;
j = 0;
while (value[j])
{
if (value[j] == '$')
value[j] = -1;
new_token[i++] = value[j++];
}
k += ft_strlen(name);
while (token[k])
new_token[i++] = token[k++];
free(token);
return (new_token);
}

char *heredoc_expansion(char *line)
{
char *name;
char *value;
char *new_line;

name = get_name_here(line);
if (!name)
{
expands_dollars_dollars(line);
return (line);
}
value = get_env_value(name + 1);
new_line = replace_name_value_here(line, name, value);
if (*(name + 1) == '?')
free(value);
free(name);
return (heredoc_expansion(new_line));
}
Binary file added path/ls
Binary file not shown.

0 comments on commit 63542a9

Please sign in to comment.