diff --git a/includes/exec/expander.h b/includes/exec/expander.h index ce6ffe4..2496210 100644 --- a/includes/exec/expander.h +++ b/includes/exec/expander.h @@ -37,6 +37,6 @@ int get_new_len(t_ast_n *node, int j); int valid_expand(t_ast_n *node, int j, int k); char *create_new(t_ast_n *node, int j, int *len); void handle_copy(t_ast_n *node, int j, char **new); -void cat_exit(t_ast_n *node, char **new, int i, int *k); +void cat_exit(t_ast_n *node, char **new, int *i, int *k); #endif diff --git a/srcs/execution/exec.c b/srcs/execution/exec.c index b30bf5f..9eccfae 100644 --- a/srcs/execution/exec.c +++ b/srcs/execution/exec.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/01/27 11:22:33 by lderidde #+# #+# */ -/* Updated: 2025/02/11 12:30:00 by lderidde ### ########.fr */ +/* Updated: 2025/02/12 11:14:14 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -14,6 +14,8 @@ int execute_command(t_ast_n *node) { + if (!node->cmd) + return (0); if (node->state == _CMD) handle_redir(node); if (node->state == _CMD) diff --git a/srcs/execution/exec_cmd.c b/srcs/execution/exec_cmd.c index 8440839..5201dd3 100644 --- a/srcs/execution/exec_cmd.c +++ b/srcs/execution/exec_cmd.c @@ -84,7 +84,9 @@ int exec_scmd(t_ast_n *node) pid_t pid; int status; - if (is_builtin(node->cmd)) + if (!node->cmd) + return (0); + else if (is_builtin(node->cmd)) return (exec_builtin(node)); else { diff --git a/srcs/expander/expand_var.c b/srcs/expander/expand_var.c index 35506cd..2432303 100644 --- a/srcs/expander/expand_var.c +++ b/srcs/expander/expand_var.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/07 12:58:25 by lderidde #+# #+# */ -/* Updated: 2025/02/12 09:06:11 by lderidde ### ########.fr */ +/* Updated: 2025/02/12 11:02:35 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -46,8 +46,9 @@ static char *extract_env(char *str, char **envp) int get_new_len(t_ast_n *node, int j) { - int i; - int len; + int i; + int len; + char *itoa; i = 0; len = ft_strlen(node->args[j]); @@ -57,7 +58,9 @@ int get_new_len(t_ast_n *node, int j) && node->args[j][i + 1] == '?') && !in_squote(node->args[j], &node->args[j][i])) { - len -= 1; + itoa = ft_itoa(node->msh->ex_code); + len += ft_strlen(itoa) - 2; + free(itoa); } else if (node->args[j][i] == '$' && !in_squote(node->args[j], &node->args[j][i])) @@ -87,7 +90,7 @@ void expander_var(t_ast_n *nd, int j) if (nd->args[j][k] != '$' || in_squote(nd->args[j], &nd->args[j][k])) new[i] = nd->args[j][k++]; else if (expand_exit(nd, j, k)) - cat_exit(nd, &new, i, &k); + cat_exit(nd, &new, &i, &k); else if (valid_expand(nd, j, k)) { ft_strlcat(new, extract_env(&nd->args[j][k], nd->msh->env), -1); diff --git a/srcs/expander/expander_var_utils.c b/srcs/expander/expander_var_utils.c index 30efd6e..408612c 100644 --- a/srcs/expander/expander_var_utils.c +++ b/srcs/expander/expander_var_utils.c @@ -6,7 +6,7 @@ /* By: lderidde +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/12 09:17:28 by lderidde #+# #+# */ -/* Updated: 2025/02/12 09:17:28 by lderidde ### ########.fr */ +/* Updated: 2025/02/12 11:01:55 by lderidde ### ########.fr */ /* */ /* ************************************************************************** */ @@ -48,8 +48,13 @@ void handle_copy(t_ast_n *node, int j, char **new) node->args[j] = *new; } -void cat_exit(t_ast_n *node, char **new, int i, int *k) +void cat_exit(t_ast_n *node, char **new, int *i, int *k) { - (*new)[i] = node->msh->ex_code + '0'; + char *itoa; + + itoa = ft_itoa(node->msh->ex_code); + ft_strlcat(*new, itoa, -1); + *i = ft_strlen(*new) - 1; *k += 2; + free(itoa); }