/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* export.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cchauvet next != NULL) { write(fd, "declare -x ", 11); ft_putstr_fd(((t_env *)(current->content))->key, fd); if (((t_env *)(current->content))->value != NULL) { ft_putstr_fd("=", fd); write(fd, "\"", 1); ft_putstr_fd(((t_env *)(current->content))->value, fd); write(fd, "\"\n", 2); } else write(fd, "\n", 2); current = current->next; } } int set_key_value_export(t_list **env, char *args, char **key, char **value) { *key = ft_strndup(args, ft_strnchr(args, '=')); if (*key == NULL) return (1); if (ft_strlen(*key) == 0) return (1); if (possible_key(*key) == 2) { (*key)[ft_strlen(*key) - 1] = '\0'; if (get_value_by_key(*key, env) == NULL) *value = ft_strdup(ft_strchr(args, '=') + 1); else *value = ft_strjoin(get_value_by_key(*key, env), ft_strchr(args, '=') + 1); } else *value = ft_strdup(ft_strchr(args, '=') + 1); return (0); } int add_export(t_list **env, char *args, int fd) { char *key; char *value; if (ft_strchr(args, '=') != NULL) { if (set_key_value_export(env, args, &key, &value)) return (error(args, fd)); } else { key = ft_strdup(args); value = get_value_by_key(key, env); if (value != NULL) value = ft_strdup(value); if (possible_key(key) == 2) return (error(key, fd)); } if (!possible_key(key)) return (error(args, fd)); create_value_by_key(key, value, env); return (0); } int ft_export(t_list **env, char **args, int fd) { int err; int i; err = 0; if (args[0] == NULL) print_export(env, fd); else { i = -1; while (args[++i]) if (add_export(env, args[i], fd) == 1) err = 1; } return (err); }