Ejemplo n.º 1
0
int			change_pwd(t_data *data, char *var)
{
	char	*tmp;
	int		buffsize;
	char	*pwd;

	tmp = NULL;
	if (ft_strcmp(var, "OLD") == 0)
	{
		buffsize = ft_strlen(get_var_env(data, "PWD=")) + 256;
		tmp = getcwd(tmp, buffsize);
		pwd = ft_strjoin("OLDPWD=", tmp);
		free(tmp);
		set_var_env(data, pwd);
		free(pwd);
	}
	else if (ft_strcmp(var, "PWD") == 0)
	{
		buffsize = ft_strlen(get_var_env(data, "PWD=")) + 256;
		tmp = getcwd(tmp, buffsize);
		pwd = ft_strjoin("PWD=", tmp);
		free(tmp);
		set_var_env(data, pwd);
		free(pwd);
	}
	return (0);
}
Ejemplo n.º 2
0
void		ft_change_part2(char *env_pwd, t_data *data)
{
	char	*path;

	path = ft_strjoin(env_pwd, get_var_env(data, "OLDPWD"));
	ft_putendl(get_var_env(data, "OLDPWD="));
	change_pwd(data, "OLD");
	chdir(path);
}
Ejemplo n.º 3
0
static int	test_path(char **tab, char **env)
{
  int		i;
  char		*path_in_str;
  char		**path_in_array;
  char		*cmd;
  int		a;

  if ((path_in_str = get_var_env(env, "PATH=")) == NULL)
    path_in_str = create_path();
  path_in_array = my_str_to_wordtab_pattern(path_in_str, ":");
  i = -1;
  while (path_in_array[++i])
    {
      cmd = concat_str(path_in_array[i], tab[0], '/');
      if ((a = execve(cmd, tab, env)) != -1)
	{
	  free(cmd);
	  free_tab(path_in_array);
	  return (a);
	}
      free(cmd);
    }
  free_tab(path_in_array);
  return (cmd_not_found(tab));
}
Ejemplo n.º 4
0
char			*find_path_exec(char *exec, t_gen *envp)
{
	char		*path;
	char		**split;
	int			i;

	i = -1;
	if ((path = get_var_env("PATH=", envp->env)) == NULL)
		return (NULL);
	split = ft_strsplit(path, ':');
	while (split[++i])
	{
		path = concat_path(split[i], exec);
		if ((access(path, F_OK) != -1) &&
				((envp->ret = check_access(path)) == 0))
			break ;
		else
		{
			envp->ret = check_access(path);
			ft_strdel(&path);
			if (envp->ret == ENPERM)
				break ;
		}
	}
	free_split(&split);
	return (path);
}
Ejemplo n.º 5
0
void			cg_shlvl(t_cmd *cmd)
{
	int		i;

	i = ft_atoi(get_var_env("SHLVL", cmd->env));
	i++;
	sh_setenv("SHLVL", ft_itoa(i), 1, cmd);
}
Ejemplo n.º 6
0
void			cg_oldpwd(t_cmd *cmd)
{
	int		i;

	i = 0;
	while (cmd->env[i])
	{
		if (!ft_strncmp(cmd->env[i], "OLDPWD=", 7))
			cmd->env[i] =
				ft_strjoin("OLDPWD=", get_var_env("PWD", cmd->env));
		i++;
	}
}
Ejemplo n.º 7
0
void		check_right(char **path, char **args, t_data *data)
{
	struct stat		stats;

	if (stat(*path, &stats) == -1)
	{
		ft_putstr("cd: no such file or directory: ");
		ft_putendl(args[1]);
		*path = get_var_env(data, "PWD=");
	}
	else if ((stats.st_mode & S_IRUSR) == 0)
	{
		ft_putstr("cd: permission denied: ");
		ft_putendl(args[1]);
		*path = get_var_env(data, "PWD=");
	}
	else if ((stats.st_mode & S_IFDIR) == 0)
	{
		ft_putstr("cd: not a directory: ");
		ft_putendl(args[1]);
		*path = get_var_env(data, "PWD=");
	}
}
Ejemplo n.º 8
0
void		ft_changedirectory(t_data *data, char **args)
{
	char	*env_pwd;
	char	*path;

	env_pwd = ft_strjoin(get_var_env(data, "PWD="), "/");
	if (args[1] && ft_strcmp(args[1], "-") == 0)
		ft_change_part2(env_pwd, data);
	else if (args[1])
	{
		path = ft_strjoin(env_pwd, args[1]);
		check_right(&path, args, data);
		change_pwd(data, "OLD");
		path = (args[1][0] == '/' ? args[1] : path);
		chdir(path);
	}
	else
	{
		path = get_var_env(data, "HOME=");
		change_pwd(data, "OLD");
		chdir(path);
	}
	free(env_pwd);
}
Ejemplo n.º 9
0
int		delete_cmd(t_data *data, int j)
{
	int		curent_line;
	char	*term_name;
	int		total_len;

	term_name = get_var_env(data,"TERM=");
	if (term_name == NULL)
		return (1);
	tgetent(NULL, term_name);
	total_len = ft_strlen(PROMPT) + j;
	curent_line = (total_len / (tgetnum("co") + 1)) + 1;
	ft_del_line(data, curent_line);
	while (j + ft_strlen(PROMPT) >= 1)
	{
		j--;
		tputs(tgetstr("le", NULL), 0, ft_outc);
	}
	return (j);
}
Ejemplo n.º 10
0
char			*check_and_get_path(char *var, t_gen *envp)
{
	char		*path;

	path = NULL;
	if (var[0] == '.')
	{
		path = ft_strdup(var + 2);
		if ((envp->ret = check_access(path)) != 0)
			return (NULL);
	}
	else if (var[0] == '/' ||
			!(ft_strcmp("/", get_var_env("PWD=", envp->env))))
	{
		path = ft_strdup(var);
		if ((envp->ret = check_access(path)) != 0)
			return (NULL);
	}
	else
		path = find_path_exec(var, envp);
	return (path);
}