]> git.dkaiser.de - 42/minishell.git/commitdiff
Merge branch 'main' into miau
authorDominik Kaiser <dkaiser@student.42heilbronn.de>
Mon, 20 Jan 2025 18:04:57 +0000 (19:04 +0100)
committerGitHub <noreply@github.com>
Mon, 20 Jan 2025 18:04:57 +0000 (19:04 +0100)
1  2 
include/env.h
include/minishell.h
include/token.h
src/builtins_part_two.c
src/env.c
src/interpreter.c
src/tokenizer.c

diff --cc include/env.h
index 56b50b553c897e716f2d797506f942238e12c541,a35bec37ebe176d0f49e43d512cfc8c93108fa5b..bfb28c7c0f7c05ab3bdc269af88ece5116a08fed
@@@ -22,22 -19,7 +22,22 @@@ typedef struct s_en
        struct s_env    *next;
  }                                     t_env;
  
 -void                          getenvlst(t_env **env, char **en);
 -void                          free_envlst(t_env **env);
 -char                          *env_get(t_env *env, char *name);
 -char                          **env_to_strlst(t_env *env);
 +void  free_env_node(t_env *node);
 +void  getenvlst(t_env **env, char **en);
 +void  free_envlst(t_env **env);
 +char  *env_get(t_env *env, char *name);
 +char  **env_to_strlst(t_env *env);
 +void  update_oldpwd(t_env **env);
 +void  update_pwd(t_env **env);
 +int           unset(char **av, t_env **env);
 +int           export(char **av, t_env **env, int f);
 +int           echo(char **av);
 +int           pwd(t_env *env);
 +int           cd(t_env **env, char **args);
 +int           ft_env(t_env *env);
 +int           builtin_exit(char **args, t_env **env);
 +t_env *env_new(char *name);
 +t_env *check_existing(t_env *env, char *av);
 +int           check_flag(int f);
 +
- #endif
++#endif
index 1139dbb9a8299f260a02caee1f0b715b665496f7,b2a3845dc46436652107396d4560a9c70196f3b2..e9810bd8f38bfdca34df5e60925df8766eb43c76
  int                           init(void);
  int                           init_signal_handling(void);
  
 -void                  repl(const char *prompt, t_env **env);
 +void                  repl(const char *prompt, t_env **env, int *promptflag);
  
 -t_list                        *parse(t_token *tokens);
 -t_node                        *parse_cmd(t_token *tokens);
 -t_redirection *collect_redirs(t_token **tokens);
 +t_list                        *parse(t_token *tokens, t_env **env);
 +t_node                        *parse_cmd(t_token *tokens, t_env **env);
 +t_redirection *collect_redirs(t_token **tokens, t_env *env, t_list **cf);
  
  void                  print_ast(t_node *ast);
  int                           eval(t_node *node, t_env **env);
 -char                  *get_cmd_path(char *cmd, t_env *env);
 -int                           execute_cmd(t_cmd *cmd, t_env *env);
 +char                  *get_cmd_path(char *cmd, t_env *env, int *return_code);
 +int                           execute_cmd(t_cmd *cmd, t_env **env);
 +char                  *format_string(char *str, t_env *env, int is_literal);
 +void                          set_return_code(int return_code, t_env **env);
 +int                           handle_redirections(t_redirection *redirs);
 +void                  *error(int err_code, char *err_text, int exit_code,
 +                                      int *ret_code);
 +void                  command_not_found_error(char *cmd);
 +char                  *read_heredoc(char *delimiter);
 +int                           handle_input_redirection(t_redirection *redir);
 +int                           handle_output_redirection(t_redirection *redir);
 +int                           handle_redirections(t_redirection *redirs);
 +int                           handle_pipe_parent(int p[2], t_node *node, t_env **env);
 +int                           handle_pipe_child(int p[2], t_node *node, t_env **env,
 +                                      int in_fd);
 +int                           open_file(char *path, int flags, int mode);
 +int                           eval_rec(t_node *node, t_env **env, int in_fd);
 +int                           create_files(t_list *files);
 +void                  q4fc(t_list **queue, t_redirection *redir);
 +void                  i_love_the_norme(t_token **cur, t_token **tokens);
 +
 +typedef struct s_minidata
 +{
 +      t_env           *env;
 +      t_list          **create_files;
 +}                             t_minidata;
 +
  #endif
diff --cc include/token.h
index 993a40823aaeccb1b6fe7a79dfab512cdbf74162,7e2038a426a397d3ea34fe93f6eaeed0e75d1cd0..bb7ea9445e3dec5c086e03a42be77f37de152507
@@@ -45,10 -45,8 +45,9 @@@ t_token                                              *new_redir_token(int type
                                                                t_token *next);
  
  void                                          free_token(t_token *token);
- void                                          free_token_and_connect(t_token *token);
- void                                          free_tokens(t_token *tokens);
  void                                          tokenizer(char *s, t_token **token_list,
                                                                char quote_check);
 +void                                          print_token(t_token *token);
  
  #endif
index 9fabc812a0e9cb23b92f9642028ae4e9f5b5fe86,94ef258790a0e1b9dca0f0c6725417874e832784..d3c0929d9becb3c3f8d8c158436f8441fdcf6d51
@@@ -59,11 -55,13 +59,11 @@@ void       update_pwd(t_env **env
  int   cd(t_env **env, char **av)
  {
        t_env   *current;
 -      t_env   *prev;
 -      t_env   *pwd;
--
 -      current = env;
++  
 +      current = *env;
        if (av[1] == NULL)
        {
 -              update_oldpwd(&env);
 +              update_oldpwd(env);
                while (current)
                {
                        if (ft_strncmp(current->name, "HOME", 4) == 0)
diff --cc src/env.c
index cc9cfaeb9c7d86bac4f9ac68170f91fcebcb96f9,31109653a4a0ebb4dda35f6565b4bb6782049bdd..63a0f8a51e2a3aa2d0bce37e4bee768a56327dd8
+++ b/src/env.c
@@@ -61,21 -62,3 +61,21 @@@ char        *env_get(t_env *env, char *name
        }
        return (NULL);
  }
- }
 +
 +t_env *env_new(char *name)
 +{
 +      t_env   *result;
 +
 +      result = malloc(sizeof(t_env));
 +      if (!result)
 +              return (NULL);
 +      result->name = name;
 +      return (result);
 +}
 +
 +void  free_env_node(t_env *node)
 +{
 +      free(node->name);
 +      free(node->value);
 +      free(node);
++}
index f31e96539e545ec8104ee99bb66c5a2711145ea1,c6a4a0074a3be6e281937ce26541dabe7b747c97..6d71022a1c0c4c701b63910f2e3e68ed60980db2
@@@ -49,7 -88,3 +49,8 @@@ int   eval_rec(t_node *node, t_env **env
        return (result);
  }
  
 +int   eval(t_node *node, t_env **env)
 +{
 +      return (eval_rec(node, env, STDIN_FILENO));
 +}
++
diff --cc src/tokenizer.c
Simple merge