/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* cmd_env.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: tmaze +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/09/20 14:33:48 by tmaze #+# #+# */ /* Updated: 2020/01/30 15:41:08 by tmaze ### ########.fr */ /* */ /* ************************************************************************** */ #include "minishell.h" static void put_env(t_env *env) { t_env *it; it = env; while (it) { ft_printf("%s=", it->key); if (it->val) ft_printf("%s", it->val); ft_putchar('\n'); it = it->next; } } t_env *envcpy(t_env *env) { t_env *cpy; cpy = NULL; if (env != NULL && (cpy = (t_env*)ft_memalloc(sizeof(t_env))) != NULL) if ((cpy->key = ft_strdup(env->key)) == NULL || (cpy->val = ft_strdup(env->val)) == NULL) ft_envdelelem(&cpy); return (cpy); } int env_cleanup(t_env *env_cp, int code) { ft_envdel(&env_cp); if (code == 2) ft_putstr_fd("minishell: env: Env copy error\n", 2); return (code); } t_env *inline_env(char **argv, int *i, t_env **env_cp) { t_env *new; while (ft_strchr(argv[*i], '=')) { if ((new = ft_envnew(argv[*i])) == NULL) { ft_printf("env: memory error\n"); ft_envdel(env_cp); break ; } ft_envaddend(env_cp, new); (*i)++; } return (*env_cp); } int cmd_env(char **argv, t_env **env) { int i; t_env *it; t_env *new; t_env *env_cp; i = 1; if (!(env_cp = NULL) && !ft_strequ(argv[i], "-i") && (env != NULL)) { it = *env; while (it) { if ((new = envcpy(it)) == NULL) return (env_cleanup(env_cp, 2)); ft_envaddend(&env_cp, new); it = it->next; } } else if (ft_strequ(argv[i], "-i")) i++; inline_env(argv, &i, &env_cp); if (argv[i]) exec_cmd(argv + i, &env_cp); else put_env(env_cp); return (env_cleanup(env_cp, 0)); }