Exemple #1
0
static int		move_to_env(t_env *environ, char *env, char *av)
{
	char	*oldpwd;
	char	*pwd;
	char	buffer[256];
	char	*cat;
	char	*tmp;

	cat = NULL;
	tmp = NULL;
	pwd = NULL;
	if (!ft_strcmp(env, "OLDPWD") && ft_strlen(av) > 0)
	{
		tmp = ft_strsub(av, 1, ft_strlen(av));
		cat = ft_strdup(tmp);
		av = ft_strdup(tmp);
	}
	oldpwd = getcwd(buffer, 256);
	pwd = return_env(environ->environ, env);
	if (!pwd)
	{
		cant_move_home();
		move_old_and_pwd(environ, oldpwd, pwd);
		free_elements(pwd, cat, tmp, NULL);
		return (1);
	}
	ft_memdel((void**)&tmp);
	ft_memdel((void**)&av);
	return (move_to_env_suite(environ, cat, pwd, oldpwd));
}
Exemple #2
0
void	ft_sig_tstp(int x)
{
	t_env	*env;

	env = return_env();
	(void)x;
	if (env->pid > 0)
	{
		start();
	}
}
Exemple #3
0
void	ft_sig_segv(int x)
{
	t_env	*env;

	env = return_env();
	if (x == SIGSEGV)
		ft_putstr("ft_sh : segmentation fault\n");
	if (env->pid > 0)
		exit (0);
	start();
}
Exemple #4
0
void			replace_tilde(char **origin, int *index, char **environ)
{
	char	*ret;
	char	*var;
	int		var_len;

	if (!(var = return_env(environ, "HOME")))
		var = "\0";
	var_len = ft_strlen(var);
	ret = ft_strnew(var_len + ft_strlen(*origin));
	*((*origin) + (*index)) = 0;
	ft_strcpy(ret, *origin);
	ft_strcpy(ret + (*index), var);
	ft_strcpy(ret + (*index) + var_len, *origin + (*index) + 1);
	free(*origin);
	*index += var_len - 1;
	*origin = ret;
	if (var_len)
		free(var);
}