Esempio n. 1
0
int		my_cd(char *str, t_struct *pile)
{
  struct stat	s;
  int		n;
  char		*tmp;

  n = 0;
  tmp = NULL;
  if ((str != NULL) && (*str == 0))
    str = my_aff_param_list(pile->my_env, HOME);
  if (str == NULL)
    str = my_strdup(pile->home);
  if ((str != NULL) && (str[0] != '/') && (str[0] != '-') && str[0] != '.')
    tmp = my_strcat("./", str);
  else if (str != NULL)
    tmp = my_strdup(str);
  if ((str != NULL) && (str[0] != '-') && (stat(tmp, &s) < 0))
    {
      msg_error(str, NO_FILE_DIR, pile);
      return (0);
    }
  if ((str != NULL) && ((str[0] == '-') || (check_perm(s, tmp) == 0)))
    find_cd(tmp, pile);
  else
    msg_error(str, ": Permission denied\n", pile);
  cd_check(tmp);
  return (0);
}
Esempio n. 2
0
char		*my_cd(char **str, t_mini mini, t_var var)
{
  int		d;
  char		*buffer;
  char		**tab3;

  var.i = 0;
  var.j = 0;
  d = cd_check(mini, d);
  if ((buffer = malloc(sizeof(char *) * PATH_MAX)) == NULL)
    return (NULL);
  if ((tab3[1] = malloc(sizeof(char *) * PATH_MAX)) == NULL)
    return (NULL);
  getcwd(buffer, sizeof(char *) * PATH_MAX);
  while (buffer[var.i] != 0)
    {
      tab3[1][var.i] = buffer[var.i];
      var.i = var.i + 1;
    }
  tab3[1][var.i] = '/';
  while (str[d][var.j] != 0)
    {
      tab3[1][var.i + 1] = str[d][var.j];
      var.i = var.i + 1;
      var.j = var.j + 1;
    }
  my_cd_2(tab3, var.i);
}
Esempio n. 3
0
static int		cd_write_in_pwd(char **args, char ***env)
{
	char		*pwd;
	char		*tmp;

	pwd = cd_check(args, env);
	if (chdir(pwd) != -1)
	{
		tmp = pwd;
		if (args[0][0] == '-' && ft_strlen(ft_strrchr(args[0], 'P')) == 1)
		{
			pwd = ft_getcwd(tmp, *env);
			free(tmp);
		}
		ft_change_pwds(pwd, env);
		free(pwd);
		return (0);
	}
	return (cd_error(pwd, args[1]));
}