The builtins wasnt protected, now all data received is protected, the hashmap addition is protected and added functionality of env, export and unset (not implemented in this version). Added fixed details documentation in docs/builtins_fixes.md generated by codex and created tests/builtins_edge_cases.sh to test all the builtins to work correctly
113 lines
3.7 KiB
C
113 lines
3.7 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* core.h :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: sede-san <sede-san@student.42madrid.com +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2025/10/22 19:10:13 by sede-san #+# #+# */
|
|
/* Updated: 2026/02/09 18:45:41 by sede-san ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#ifndef CORE_H
|
|
# define CORE_H
|
|
|
|
# include "minishell.h"
|
|
|
|
/******************************************************************************/
|
|
/* Structures & Data Types */
|
|
/******************************************************************************/
|
|
|
|
typedef struct s_minishell t_minishell;
|
|
typedef struct s_variables t_variables;
|
|
typedef struct s_command t_command;
|
|
|
|
/**
|
|
* @brief Structure that holds both environment and internal variables
|
|
*
|
|
* This structure contains pointers to arrays of strings that represent
|
|
* different types of variables used in the minishell program.
|
|
*
|
|
* @param environment Array of environment variable strings (NULL-terminated)
|
|
//// @param intp Array of internal variable strings (NULL-terminated)
|
|
*/
|
|
typedef struct s_variables
|
|
{
|
|
t_hashmap *environment;
|
|
// char **internal;
|
|
} t_variables;
|
|
|
|
/**
|
|
* @brief Main minishell structure containing global state information
|
|
*
|
|
* This structure holds the essential data for the minishell program.
|
|
*
|
|
* @param variables Structure that holds both environment and internal variables
|
|
* @param exit_status Exit status code of the last executed command (0-255)
|
|
*/
|
|
typedef struct s_minishell
|
|
{
|
|
t_variables variables;
|
|
t_hashmap *builtins;
|
|
uint8_t exit_status;
|
|
bool exit;
|
|
} t_minishell;
|
|
|
|
/**
|
|
* @brief Structure representing a single command in the shell
|
|
*
|
|
* This structure holds all the necessary information for executing a command
|
|
* in the minishell, including its arguments and executable path.
|
|
*
|
|
* @param argc Number of arguments in the command (including the command name)
|
|
* @param argv Array of strings containing the command and its arguments
|
|
* @param path Full path to the executable file for this command
|
|
*/
|
|
typedef struct s_command
|
|
{
|
|
int argc;
|
|
char **argv;
|
|
char *path;
|
|
t_list *redirections;
|
|
} t_command;
|
|
|
|
/**
|
|
* @brief Default shell prompt string
|
|
*/
|
|
# define DEFAULT_PS1 "minishell > "
|
|
|
|
/**
|
|
* @brief Default secondary prompt string for multiline input
|
|
*/
|
|
# define DEFAULT_PS2 "> "
|
|
|
|
/******************************************************************************/
|
|
/* Functions */
|
|
/******************************************************************************/
|
|
|
|
/* minishell.c */
|
|
|
|
extern int minishell_init(t_minishell *minishell, char **envp);
|
|
|
|
extern uint8_t minishell_run(t_minishell *minishell);
|
|
|
|
extern void minishell_clear(t_minishell *minishell);
|
|
|
|
/* environment.c */
|
|
|
|
extern void set_envp(char **envp, t_minishell *msh);
|
|
|
|
extern void set_env(const char *env_name, char *env_value,
|
|
t_minishell *msh);
|
|
|
|
extern char **get_envp(t_minishell *msh);
|
|
|
|
extern void free_envp(char **envp);
|
|
|
|
extern char *get_env(const char *env_name, t_minishell *msh);
|
|
|
|
extern void unset_env(const char *env_name, t_minishell *msh);
|
|
|
|
#endif /* CORE_H */
|