48 lines
1.1 KiB
C
48 lines
1.1 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], '='))
|
|
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_strjoin(c->envp[position], var[1]);
|
|
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 :
|
|
**
|
|
**
|
|
*/
|
|
|