diff options
Diffstat (limited to 'src/env.c')
| -rw-r--r-- | src/env.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/env.c b/src/env.c new file mode 100644 index 0000000..04ab561 --- /dev/null +++ b/src/env.c @@ -0,0 +1,50 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* environment.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/28 09:21:24 by cacharle #+# #+# */ +/* Updated: 2020/02/28 12:30:55 by cacharle ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "minishell.h" + +#define MS_ENV_HT_SIZE 2048 + +t_env ms_env_from_array(char **envp) +{ + t_env env; + int i; + char *key; + char *value; + + if (envp == NULL) + return (NULL); + if ((env = ft_htnew(MS_ENV_HT_SIZE)) == NULL) + return (NULL); + i = -1; + while (envp[++i] != NULL) + { + // free stuff on error + if ((value = ft_strchr(envp[i], '=')) == NULL) + return (NULL); + if ((key = ft_strndup(envp[i], ft_strcspn(envp[i], "="))) == NULL) + return (NULL); + if ((value = ft_strdup(value + 1)) == NULL) + return (NULL); + if (ft_htset(env, key, value, ms_ht_del_str_entry) == NULL) + return (NULL); + free(key); + } + return (env); +} + +char **ms_env_to_array(t_env env) +{ + (void)env; + // need ft_htlen + return (NULL); +} |
