Merge branch 'main' of github.com:gazhonsepaskwa/mmoat
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
|
||||||
while (envp[i])
|
|
||||||
i++;
|
|
||||||
new_envp = malloc(sizeof(char *) * i + 1);
|
|
||||||
new_envp[i] = NULL;
|
|
||||||
i = -1;
|
|
||||||
while (envp[++i])
|
|
||||||
new_envp[i] = ft_strdup(envp[i]);
|
|
||||||
// code = 0;
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while (arg[i])
|
while (tab[i])
|
||||||
i++;
|
free(tab[i++]);
|
||||||
if (i == 1)
|
free(tab);
|
||||||
return(print_export(new_envp), envp);
|
}
|
||||||
return (envp);
|
|
||||||
// i = -1;
|
char **key_value(char *str)
|
||||||
// while (arg[++i])
|
{
|
||||||
// {
|
char **tmp;
|
||||||
// if (check_format(arg[i]))
|
char *equal;
|
||||||
// {
|
|
||||||
//
|
tmp = malloc(sizeof(char *) * (2 + 1));
|
||||||
// }
|
if (!tmp)
|
||||||
// else
|
return (NULL);
|
||||||
// print_error(arg[i], &code);
|
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;
|
||||||
|
if (count_var(arg) == 1)
|
||||||
|
return (print_export(data->env));
|
||||||
|
while (++i < count_var(arg))
|
||||||
|
{
|
||||||
|
if (ft_strchr(arg[i], '=') != NULL)
|
||||||
|
{
|
||||||
|
tmp = key_value(arg[i]);
|
||||||
|
set_var_env(tmp[0], tmp[1], data);
|
||||||
|
free_tmp(tmp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
set_var_env(arg[i], NULL, data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
9
srcs/env/var.c
vendored
9
srcs/env/var.c
vendored
@@ -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 ;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user