Add check for unsuccessful execution
authorLukas Jiriste <ljiriste@student.42prague.com>
Sun, 21 Jul 2024 11:12:10 +0000 (13:12 +0200)
committerLukas Jiriste <ljiriste@student.42prague.com>
Sun, 21 Jul 2024 11:12:10 +0000 (13:12 +0200)
Add some checks inside ex_simple_command.

src/execution.c

index cb47adf329f4c9dfde5f90c6522d49d28aaeba4b..40ec8af8370a2bd46c9fac433876095206a8e924 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: ljiriste <ljiriste@student.42prague.com>   +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/07/21 08:57:54 by ljiriste          #+#    #+#             */
-/*   Updated: 2024/07/21 13:03:02 by ljiriste         ###   ########.fr       */
+/*   Updated: 2024/07/21 13:11:50 by ljiriste         ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
@@ -17,11 +17,13 @@ int ex_simple_command(t_parse_tree_node *simple_command, t_execution_env *env)
        t_vec   redirections;
        t_vec   assignments;
        char    **fields;
+       int             res;
 
-       save_redirections(&redirections, simple_command);
-       save_assignments(&assignments, simple_command);
-       fields = expand(simple_command, env, &redirections, &assignments);
-       if (!fields)
+       res = save_redirections(&redirections, simple_command);
+       res = res || save_assignments(&assignments, simple_command);
+       if (!res)
+               fields = expand(simple_command, env, &redirections, &assignments);
+       if (!fields || res)
        {
                ft_vec_free(&redirections, void_free_redirection);
                ft_vec_free(&assignments, void_free_assignments);
@@ -31,13 +33,15 @@ int ex_simple_command(t_parse_tree_node *simple_command, t_execution_env *env)
        {
                save_assignments(&assignments, env);
                ex_redirections(&redirections);
+               ft_vec_free(&redirections, void_free_redirection);
+               ft_vec_free(&assignments, void_free_assignments);
                return (0);
        }
-       ex_fields(fields, &assignments, &redirections, env);
+       res = ex_fields(fields, &assignments, &redirections, env);
        ft_vec_free(&redirections, void_free_redirection);
        ft_vec_free(&assignments, void_free_assignments);
        free_fields(fields);
-       return (0);
+       return (res);
 }
 
 int    subshell(t_parse_tree_node *program, const t_execution_env *env)