コード例 #1
0
ファイル: sh_builtin_unsetenv.c プロジェクト: gj42/ft_sh1
void		sh_builtin_unsetenv(char **av, char ***env)
{
	int		i;
	int		n;

	i = 0;
	n = 0;
	if (!av || !env)
		return ;
	if (ft_arrlen(av) != 2)
	{
		sh_unsetenv_usage();
		return ;
	}
	while ((*env)[i])
	{
		if (sh_get_env_pos(av[1], *env) >= 0)
			n++;
		i++;
	}
	if (n != 0)
		sh_builtin_delete(0, av, env);
	else
		ft_putendl_fd("unsetenv: wrong arg", 2);
}
コード例 #2
0
ファイル: sh_builtin_unsetenv.c プロジェクト: gj42/ft_sh1
static void	sh_builtin_delete(int n, char **av, char ***env)
{
	char	**new_env;
	int		i;

	i = 0;
	if ((new_env = (char**)malloc(sizeof(char*) * ft_arrlen(*env))) == NULL)
		return ;
	if (((n = sh_get_env_pos(av[1], *env)) >= 0) && (*env)[n])
	{
		while ((*env)[i] && i < n)
			new_env[i] = (*env)[i], i++;
		free((*env)[i]);
		while ((*env)[i] && ((*env)[i] = (*env)[i + 1]))
		{
			new_env[i] = (*env)[i];
			i++;
		}
		new_env[i] = NULL;
		free(*env);
		*env = new_env;
	}
}
コード例 #3
0
ファイル: ft_arrlen.c プロジェクト: Tix6/libft
size_t	ft_arrlen(char **array)
{
	return (*array ? 1 + ft_arrlen(array + 1) : 0);
}