static char *ft_get_cd_path(t_options *options, t_cmd *cmd, int i) { char *tmp; tmp = NULL; if (ft_optisset(options, '-') && (tmp = ft_getenv(*cmd->envp, "OLDPWD"))) return (ft_strdup(tmp)); else if (!cmd->args[i]) { if ((tmp = ft_getenv(*cmd->envp, "HOME")) && !ft_strequ(tmp, "")) ft_strtabadd(&cmd->args, ft_strdup(tmp)); else return (NULL); } if (cmd->args[i][0] == '/') return (ft_strdup(cmd->args[i])); else return (ft_check_in_cdpath(cmd->args[i], *cmd->envp)); }
static void ft_heredoc(t_list *begin, t_config *config, t_stream *stream) { char **kill; char *tmp; tmp = ft_streamscan(config, ft_save_stream(NULL), 0); while (stream->state != REPROMPT && (!tmp || ft_strcmp(tmp, ((char**)begin->next->data)[0]))) { kill = (char**)begin->next->data; if (!(begin->next->data = ft_strtabadd((char**)begin->next->data, ((tmp) ? tmp : ft_strnew(1))))) { ft_error(SHNAME, "heredoc", "malloc error", CR_ERROR); config->shell_state = REPROMPT; break ; } ft_freegiveone((void**)&kill); tmp = ft_streamscan(config, ft_save_stream(NULL), 0); } }
static int ft_decant(t_list *cmd, t_list *src, int i) { char **kill; if (!i && (!src || !((char**)src->data)[0] || !((char**)src->data)[0][0])) { if (src && src->next) ft_error(SHNAME, PARSE_ERR, SNDATA, CR_ERROR | EEXIT); else ft_error(SHNAME, PARSE_ERR, "newline", CR_ERROR | EEXIT); return (0); } if (!src) return (1); while (((char**)src->data)[++i]) { kill = (char**)cmd->data; cmd->data = (void*)ft_strtabadd((char**)cmd->data, ((char**)src->data)[i]); ((char**)src->data)[i] = NULL; ft_freegiveone((void**)&kill); } return (1); }