51 lines
1.2 KiB
C
51 lines
1.2 KiB
C
|
|
#include "minishell.h"
|
|
|
|
int getenv_position(char **envp, char *name)
|
|
{
|
|
int i;
|
|
|
|
i = 0;
|
|
while (envp[i] && ft_strncmp(envp[i], name, ft_strlen(name)))
|
|
i++;
|
|
if (!envp[i])
|
|
return (-1);
|
|
return (i);
|
|
}
|
|
|
|
int builtin_export(int argc, char *argv[], t_all *c)
|
|
{
|
|
char **var;
|
|
int position;
|
|
|
|
(void)argc;
|
|
var = ft_split(argv[1], '=');
|
|
position = getenv_position(c->envp, var[0]);
|
|
if (position == -1 || !ft_strchr(argv[1], '='))
|
|
{
|
|
ft_free_2d_arr(var);
|
|
return (0);
|
|
}
|
|
c->envp[position] = ft_strjoin(var[0], "=");
|
|
if (var[1]) // parce que ft_strjoin return NULL si var[1] est null, pourquoi ?
|
|
c->envp[position] = ft_strjoinfree_s1(c->envp[position], var[1]);
|
|
ft_free_2d_arr(var);
|
|
return (0);
|
|
}
|
|
|
|
/*
|
|
** comportement de bash :
|
|
** 1. modifier une variable dans bash :
|
|
** > ca ne la modifie pas dans zsh
|
|
** > ca ne la garde pas apres exit de bash
|
|
** 2. ajouter une variable dans bash :
|
|
** > ca ne la modifie pas dans zsh
|
|
** > ca ne la garde pas apres exit de bash
|
|
** 3. ajouter une variable avec erreur :
|
|
** > 'export VARIABLE' n'exporte rien
|
|
** > 'export VARIABLE=' exporte une variable vide
|
|
** 4. ordre d'insertion d'une nouvelle variable :
|
|
** > aucune idee
|
|
*/
|
|
|