Esempio n. 1
0
char	*replace_env(char **env, char *cmd, int lret)
{
	int		size;
	char	*str;

	size = replace_size_env(env, cmd, lret);
	size += replace_size_tilde(cmd, ft_getenv(env, "HOME"));
	str = ft_strnew(size + 1);
	size = 0;
	while (*cmd)
	{
		cmd = skip_quotes(cmd, &size);
		if (*cmd == '$')
			size += sub_replace_env(env, &cmd, &str[size], lret);
		else if (*cmd == '~')
		{
			size += replace_tilde(ft_getenv(env, "HOME"), &str[size]);
			cmd++;
		}
		else
		{
			str[size++] = *cmd;
			cmd++;
		}
	}
	str[size] = 0;
	return (str);
}
Esempio n. 2
0
File: utils.c Progetto: jubalh/vifm
char *
expand_path(const char path[])
{
	char *const expanded_envvars = expand_envvars(path, 0);
	/* replace_tilde() frees memory pointed to by expand_envvars. */
	return replace_tilde(expanded_envvars);
}
Esempio n. 3
0
void			parse_args(t_all *all)
{
	int i;

	i = 0;
	while (all->cmd.args[i])
	{
		all->cmd.args[i] = replace_tilde(all, all->cmd.args[i]);
		all->cmd.args[i] = replace_var(all, all->cmd.args[i]);
		i++;
	}
}
Esempio n. 4
0
void			check_tilde(t_lexer *node, char **env)
{
	int			i;
	char		*str;

	i = 0;
	str = node->str;
	while (str[i])
	{
		if (str[i] == '~' && (i == 0 || ft_isspace(str[i - 1])))
			replace_tilde(node, env, i);
		i++;
	}
}
Esempio n. 5
0
/* Breaks PATH environment variable into list of paths. */
static void
split_path_list(void)
{
	const char *path, *p, *q;
	int i;

	path = env_get("PATH");

	if(paths != NULL)
		free_string_array(paths, paths_count);

	paths_count = 1;
	p = path;
	while((p = strchr(p, ':')) != NULL)
	{
		paths_count++;
		p++;
	}

	paths = reallocarray(NULL, paths_count, sizeof(paths[0]));
	if(paths == NULL)
	{
		paths_count = 0;
		return;
	}

	i = 0;
	p = path - 1;
	do
	{
		int j;
		char *s;

		p++;
#ifndef _WIN32
		q = strchr(p, ':');
#else
		q = strchr(p, ';');
#endif
		if(q == NULL)
		{
			q = p + strlen(p);
		}

		s = malloc(q - p + 1U);
		if(s == NULL)
		{
			free_string_array(paths, i - 1);
			paths = NULL;
			paths_count = 0;
			return;
		}
		copy_str(s, q - p + 1U, p);

		p = q;

		s = replace_tilde(s);

		/* No need to check "." path for existence. */
		if(strcmp(s, ".") != 0)
		{
			if(!path_exists(s, DEREF))
			{
				free(s);
				continue;
			}
		}

		paths[i++] = s;

		for(j = 0; j < i - 1; j++)
		{
			if(stroscmp(paths[j], s) == 0)
			{
				free(s);
				i--;
				break;
			}
		}
	}
	while(q[0] != '\0');
	paths_count = i;
}