]> git.dkaiser.de - 42/minishell.git/commitdiff
yes
authorDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Thu, 17 Oct 2024 14:06:53 +0000 (16:06 +0200)
committerDominik Kaiser <dkaiser@1-C-7.42heilbronn.de>
Thu, 17 Oct 2024 14:06:53 +0000 (16:06 +0200)
Makefile
include/env.h
include/minishell.h
src/env.c
src/interpreter.c
src/main.c
src/repl.c

index 827c317214e23f6d99c8d644f9110f91e1f11597..283db1a38f9886791e017e3675de1d65eb386fe6 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ HEADERS =  -I include -I $(LIB_DIR)/libft
 VPATH   := src
 SRC     := main.c debug_tools.c init.c signal_handling.c repl.c new_token.c \
            free_token.c new_node.c free_node.c tokenizer.c parser.c \
-           parse_cmd.c collect_redirs.c print_ast.c
+           parse_cmd.c collect_redirs.c print_ast.c interpreter.c env.c
 
 OBJ_DIR := _obj
 OBJ     := $(addprefix $(OBJ_DIR)/, $(SRC:%.c=%.o))
index 5a6533387339d930e4fc00cd87b7268d177f1435..ee011811befd159bcdae65977bf0d85daa591d89 100644 (file)
@@ -6,10 +6,12 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/08/08 16:53:39 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/10/17 15:37:32 by chuhlig          ###   ########.fr       */
+/*   Updated: 2024/10/17 15:59:59 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
+#include "libft.h"
+
 typedef struct s_env
 {
        char                    *name;
@@ -19,4 +21,4 @@ typedef struct s_env
 
 void   getenvlst(t_env **env, char **en);
 void   free_envlst(t_env **env);
-
+char *env_get(t_env *env, char *name);
index 6997b15c97ad59265328c300ec9ed2680da68dac..2319e8b90282715247ac57708a3ef6ae92d0d3f1 100644 (file)
@@ -6,7 +6,7 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/06/22 17:14:49 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/08/11 12:22:07 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/10/17 15:25:58 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 int                            init(void);
 int                            init_signal_handling(void);
 
-void                   repl(const char *prompt);
+void                   repl(const char *prompt, t_env *env);
 
 t_list                 *parse(t_token *tokens);
 t_node                 *parse_cmd(t_token *tokens);
 t_redirection  *collect_redirs(t_token **tokens);
 
 void                   print_ast(t_node *ast);
+
+int    eval(t_node *node, t_env *env);
 #endif
index 8105bf42e915933606f3356e2f7202d1fc3bdaef..77ba4831667bf3ee003aee80bf9dfff4376152fb 100644 (file)
--- a/src/env.c
+++ b/src/env.c
@@ -6,11 +6,13 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/10/17 14:31:07 by chuhlig           #+#    #+#             */
-/*   Updated: 2024/10/17 15:18:44 by chuhlig          ###   ########.fr       */
+/*   Updated: 2024/10/17 15:58:28 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "env.h"
+#include "get_next_line.h"
+#include "libft.h"
 
 void   getenvlst(t_env **env, char **en)
 {
@@ -22,7 +24,7 @@ void  getenvlst(t_env **env, char **en)
        while (en[i] != NULL)
        {
                tmp = ft_strchr(en[i], '=');
-               tmp = '\0';
+               *tmp = '\0';
                current = *env;
                current = malloc(sizeof(t_env));
                current->name = ft_strdup(en[i]);
@@ -47,4 +49,15 @@ void free_envlst(t_env **env)
                free(cur);
                cur = new;
        }
-}
\ No newline at end of file
+}
+
+char *env_get(t_env *env, char *name)
+{
+       while (env != NULL)
+       {
+               if (!ft_strncmp(env->name, name, ft_strlen(name)))
+                       return (env->value);
+               env = env->next;
+       }
+       return (NULL);
+}
index 2a09e6d81fbf292e2ca4d6bc58e48865751ceecc..abaeb474e157cf9b472399a073aced9563e2af2f 100644 (file)
@@ -6,21 +6,21 @@
 /*   By: dkaiser <dkaiser@student.42heilbronn.de    +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/08/05 13:15:24 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/08/05 13:33:16 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/10/17 16:01:23 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "minishell.h"
 
-static int     eval_pipe(t_pipe *pipe);
-static int     eval_cmd(t_cmd *cmd);
+static int     eval_pipe(t_pipe *pipe, t_env *env);
+static int     eval_cmd(t_cmd *cmd, t_env *env);
 
-int    eval(t_node *node)
+int    eval(t_node *node, t_env *env)
 {
        if (node->type == PIPE_NODE)
-               return (eval_pipe(&node->content.pipe));
+               return (eval_pipe(&node->content.pipe, env));
        else if (node->type == CMD_NODE)
-               return (eval_cmd(&node->content.cmd));
+               return (eval_cmd(&node->content.cmd, env));
        else
        {
                panic(UNREACHABLE);
@@ -28,12 +28,17 @@ int eval(t_node *node)
        }
 }
 
-static int     eval_pipe(t_pipe *pipe)
+static int     eval_pipe(t_pipe *pipe, t_env *env)
 {
+       dbg("TODO: PIPE");
+       eval_cmd(&pipe->left->content.cmd, env);
+       eval_cmd(&pipe->right->content.cmd, env);
        return (0);
 }
 
-static int     eval_cmd(t_cmd *cmd)
+static int     eval_cmd(t_cmd *cmd, t_env *env)
 {
+       printf("%s\n", cmd->args[0]);
+       printf("PATH=%s\n", env_get(env, "PATH"));
        return (0);
 }
index 8523b9e56459e744278120d4110cbdf14242fde9..64bc31262682c0446d6910cd8638a184d3a6336f 100644 (file)
@@ -6,15 +6,19 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/06/22 17:14:03 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/07/18 16:44:14 by chuhlig          ###   ########.fr       */
+/*   Updated: 2024/10/17 15:34:02 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "../include/minishell.h"
 
-int    main(void)
+int    main(int argc, char *argv[], char *envp[])
 {
+       t_env *env;
+       if (!argc && !argv)
+               return (1);
        if (init())
                return (1);
-       repl("Minishell $ ");
+       getenvlst(&env, envp);
+       repl("Minishell $ ", env);
 }
index d590fec3fcee0c0aa3ff817d7f5fd30f2dad9e77..931e25e30053bddd2d7db299395d3321a6e93c73 100644 (file)
@@ -6,14 +6,14 @@
 /*   By: chuhlig <chuhlig@student.42.fr>            +#+  +:+       +#+        */
 /*                                                +#+#+#+#+#+   +#+           */
 /*   Created: 2024/06/24 16:07:04 by dkaiser           #+#    #+#             */
-/*   Updated: 2024/09/13 16:26:35 by dkaiser          ###   ########.fr       */
+/*   Updated: 2024/10/17 15:25:48 by dkaiser          ###   ########.fr       */
 /*                                                                            */
 /* ************************************************************************** */
 
 #include "../include/minishell.h"
 #include "token.h"
 
-void   repl(const char *prompt)
+void   repl(const char *prompt, t_env *env)
 {
        char    *input;
        t_token *token_list;
@@ -31,7 +31,10 @@ void repl(const char *prompt)
                tokenizer(input, &token_list, '\0');
                lines = parse(token_list);
                if (lines)
+               {
                        print_ast(lines->content);
+                       eval(lines->content, env);
+               }
                free(input);
        }
 }