Merge branch 'main' of github.com:gazhonsepaskwa/mmoat

This commit is contained in:
Nathan Lebrun
2025-01-21 12:03:27 +01:00
5 changed files with 59 additions and 51 deletions
+1 -1
View File
@@ -19,7 +19,7 @@ void builtin_pwd(char *arg);
void builtin_env(char *str, char **envp); void builtin_env(char *str, char **envp);
int builtin_unset(char **arg, t_data *data); int builtin_unset(char **arg, t_data *data);
int builtin_cd(char **arg, t_data *data); int builtin_cd(char **arg, t_data *data);
char **builtin_export(char **arg, char **envp); void builtin_export(char **arg, t_data *data);
//UTILS //UTILS
int count_char(char *str); int count_char(char *str);
+43 -40
View File
@@ -1,18 +1,5 @@
#include "../../includes/builtins.h" #include "../../includes/builtins.h"
void check_format(char **arg)
{
(void)arg;
}
void print_error(char *str, int *code)
{
ft_put_s_fd("minishell: export: ", 2);
ft_put_s_fd(str, 2);
ft_putendl_fd(": not a valid identifier", 2);
*code = 1;
}
void print_arr(char **envp) void print_arr(char **envp)
{ {
int i; int i;
@@ -42,7 +29,7 @@ void print_export(char **envp)
j = 0; j = 0;
while (j < len - i - 1) while (j < len - i - 1)
{ {
if (ft_strncmp(envp[j], envp[j + 1], ft_strlen(envp[j])) > 0) if (ft_strncmp(envp[j], envp[j + 1], ft_strchr(envp[j], '=') - envp[j]) > 0)
{ {
tmp = envp[j]; tmp = envp[j];
envp[j] = envp[j + 1]; envp[j] = envp[j + 1];
@@ -55,35 +42,51 @@ void print_export(char **envp)
print_arr(envp); print_arr(envp);
} }
char **builtin_export(char **arg, char **envp) static void free_tmp(char **tab)
{ {
char **new_envp;
int i; int i;
// int code;
i = 0; i = 0;
while (envp[i]) while (tab[i])
i++; free(tab[i++]);
new_envp = malloc(sizeof(char *) * i + 1); free(tab);
new_envp[i] = NULL; }
i = -1;
while (envp[++i]) char **key_value(char *str)
new_envp[i] = ft_strdup(envp[i]); {
// code = 0; char **tmp;
char *equal;
tmp = malloc(sizeof(char *) * (2 + 1));
if (!tmp)
return (NULL);
equal = ft_strchr(str, '=');
tmp[0] = ft_substr(str, 0, equal - str);
if (equal - str == 0)
tmp[2] = ft_strdup("");
else
tmp[1] = ft_substr(equal, 1, ft_strlen(equal));
tmp[2] = NULL;
return (tmp);
}
void builtin_export(char **arg, t_data *data)
{
int i;
char **tmp;
i = 0; i = 0;
while (arg[i]) if (count_var(arg) == 1)
i++; return (print_export(data->env));
if (i == 1) while (++i < count_var(arg))
return(print_export(new_envp), envp); {
return (envp); if (ft_strchr(arg[i], '=') != NULL)
// i = -1; {
// while (arg[++i]) tmp = key_value(arg[i]);
// { set_var_env(tmp[0], tmp[1], data);
// if (check_format(arg[i])) free_tmp(tmp);
// { }
// else
// } set_var_env(arg[i], NULL, data);
// else }
// print_error(arg[i], &code);
// }
} }
+7 -1
View File
@@ -23,7 +23,13 @@
// //
int builtin_unset(char **arg, t_data *data) int builtin_unset(char **arg, t_data *data)
{ {
int i;
int ret;
i = 0;
if (count_var(arg) == 1) if (count_var(arg) == 1)
return (err_msg_cmd("unset", NULL, "not enough arguments", EXIT_FAILURE)); return (err_msg_cmd("unset", NULL, "not enough arguments", EXIT_FAILURE));
return (remove_env_var(arg[1], data)); while (++i < count_var(arg))
ret = remove_env_var(arg[i], data);
return (ret);
} }
+4 -5
View File
@@ -136,15 +136,14 @@ void set_var_env(char *key, char *value, t_data *data)
char *tmp; char *tmp;
i = get_var_index(key, data); i = get_var_index(key, data);
if (!value) if (value)
value = ""; tmp = ft_strjoin(key, "=");
tmp = ft_strjoin("=", value);
if (!tmp) if (!tmp)
return ; return ;
if (i != -1 && data->env[i]) if (i != -1 && data->env[i])
{ {
free_null_ptr(data->env[i]); free_null_ptr(data->env[i]);
data->env[i] = ft_strjoin(key, tmp); data->env[i] = ft_strjoin(tmp, value);
} }
else else
{ {
@@ -152,7 +151,7 @@ void set_var_env(char *key, char *value, t_data *data)
data->env = copy_env_var(data->env, i + 1); data->env = copy_env_var(data->env, i + 1);
if (!data->env) if (!data->env)
return ; return ;
data->env[i] = ft_strjoin(key, tmp); data->env[i] = ft_strjoin(tmp, value);
} }
free_null_ptr(tmp); free_null_ptr(tmp);
return ; return ;
+2 -2
View File
@@ -40,7 +40,7 @@ char **ft_setnewenv(void)
return (envp); return (envp);
} }
t_data *init_data(char **envp) static t_data *init_data(char **envp)
{ {
t_data *data; t_data *data;
@@ -75,7 +75,7 @@ int main(int ac, char **av, char **envp)
if (ft_strncmp(input, "cd", 2) == 0) if (ft_strncmp(input, "cd", 2) == 0)
builtin_cd(ft_split(input, " "), data); builtin_cd(ft_split(input, " "), data);
if (ft_strncmp(input, "export", 6) == 0) if (ft_strncmp(input, "export", 6) == 0)
data->env = builtin_export(ft_split(input, " "), data->env); builtin_export(ft_split(input, " "), data);
free(input); free(input);
} }
return (0); return (0);