コード例 #1
0
ファイル: builtin_cd.c プロジェクト: Peter-West/42sh
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));
}
コード例 #2
0
ファイル: heredoc.c プロジェクト: nyhu/minishell
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);
	}
}
コード例 #3
0
ファイル: heredoc.c プロジェクト: nyhu/minishell
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);
}