Esempio n. 1
0
/*
** Builtin env
*/
void	env(char **my_env, char **cmd)
{
  int	tabsize;
  int	nb;
  char	**new_env;
  int	i;

  tabsize = my_tab_size(cmd);
  if (tabsize < 2)
    {
      my_show_to_wordtab(my_env);
    }
  else
    {
      i = 1;
      nb = count_value(cmd);
      new_env = get_my_env(my_env);
      while (i <= nb)
	{
	  new_env = exec_setenv(new_env, cmd[i]);
	  i++;
	}
      cmd = cmd + nb + 1;
      if (*cmd != 0)
	exec_cmd(cmd, new_env);
    }
}
Esempio n. 2
0
static int		cd_home(t_env **env)
{
  t_env			*tmp;
  char			*pwd;

  tmp = *env;
  if ((pwd = malloc(sizeof(char) * PWD_SIZE)) == NULL)
    return (my_perror(QUIT_ERR, QUIT_RET));
  if (exec_setenv("OLDPWD", getcwd(pwd, PWD_SIZE), env) == QUIT_RET)
    return (QUIT_RET);
  while (tmp != NULL && my_strcmp("HOME", tmp->key) != 0)
    tmp = tmp->next;
  if (tmp == NULL)
    chdir("/");
  else if (chdir(tmp->value) == -1)
    write(2, CD_FAILED, my_strlen(CD_FAILED));
  else
    if (change_pwd_env(env, "PWD") == QUIT_RET)
      return (QUIT_RET);
  return (EXIT_SUCCESS);
}
Esempio n. 3
0
int		exec_execve(t_tree *tree, t_env **env)
{
  t_env		*tmp_env;
  char		*cmd;

  tmp_env = *env;
  while (tmp_env != NULL && my_strcmp(tmp_env->key, "PATH") != 0)
    tmp_env = tmp_env->next;
  if (tmp_env == NULL || tmp_env->value == NULL)
    {
      if (exec_setenv("PATH", DEFAULT_PATH, env) == QUIT_RET)
	return (QUIT_RET);
      return (exec_execve(tree, env));
    }
  if ((cmd = check_access(tree, tmp_env)) == NULL)
    {
      write(2, tree->lexer->content, my_strlen(tree->lexer->content));
      write(2, ACCESS_ERR, my_strlen(ACCESS_ERR));
      return (EXIT_FAILURE);
    }
  return (use_execve(tree, env, cmd));
}
Esempio n. 4
0
int			change_pwd_env(t_env **env, char *key)
{
  t_env			*tmp;
  char			*pwd;

  tmp = *env;
  pwd = NULL;
  while (tmp != NULL && my_strcmp(tmp->key, key) != 0)
    tmp = tmp->next;
  if (tmp == NULL)
    {
      if ((pwd = malloc(sizeof(char) * PWD_SIZE)) == NULL)
	return (my_perror(QUIT_ERR, QUIT_RET));
      if (exec_setenv(key, getcwd(pwd, PWD_SIZE), env) == QUIT_RET)
	return (QUIT_RET);
      free(pwd);
      return (change_pwd_env(env, key));
    }
  free(tmp->value);
  if ((tmp->value = malloc(sizeof(char) * PWD_SIZE)) == NULL)
    return (my_perror(QUIT_ERR, QUIT_RET));
  getcwd(tmp->value, PWD_SIZE);
  return (EXIT_SUCCESS);
}