예제 #1
0
파일: main.c 프로젝트: Elytum/tutoSh1
int				main(int argc, char **argv, char **env_table)
{
	t_env		*env;
	char		*line;

	if (!(env = (t_env *)malloc(sizeof(t_env))))
		return (-1);
	init_env(env, env_table);
	write(1, PROMPT, sizeof(PROMPT) - 1);
	while (get_next_line(1, &env->line) > 0)
	{
		if (*env->line)
		{
			env->command = get_called_command(env->line);
			if (!strcmp(env->command, "env"))
				builtin_env(env);
			else if (!strcmp(env->command, "setenv"))
				builtin_setenv(env);
			else if (!strcmp(env->command, "unsetenv"))
				builtin_unsetenv(env);
			else if (!strcmp(env->command, "exit"))
				builtin_exit(env);
			else
				unknown_command(env->command);
		}
		write(1, PROMPT, sizeof(PROMPT) - 1);
	}
	return (0);
}
예제 #2
0
파일: set_pwd.c 프로젝트: cohen-h/projects
int	set_pwd(char ***env, char *path)
{
  char	*final_pwd;
  char	**command;
  int	i;

  i = (strncmp(path, "~/", 2) == 0) ? 1 : 0;
  if (i == 1 || (strncmp(path, "~\0", 2) == 0))
    {
      if (!(final_pwd = my_strdog(my_getenv(*env, "HOME"), "/")))
	return (1);
    }
  else if (path[0] == '/')
    {
      if (!(final_pwd = strdup("/")))
	return (-1);
    }
  else
    if (!(final_pwd = my_strdog(my_getenv(*env, "PWD"), "/")))
      return (1);
  if (!(command = my_str_to_wordtab2(path, "/")))
    return (1);
  final_pwd = set_pwd_loop(command, final_pwd, i);
  builtin_setenv(env, "PWD", final_pwd);
  free(final_pwd);
  return (1);
}
예제 #3
0
int set_pwd()
{
	char *wd = getcwd(NULL, 0);
	int ret;
	if (wd) {
		const char *setenv_argv[] = {"PWD", wd, NULL};
		ret = builtin_setenv(ARRAY_SIZE(setenv_argv) - 1, setenv_argv);
		free(wd);
	} else {
		mysh_error("getcwd()");
		ret = 1;
	}
	return ret;
}
예제 #4
0
파일: cd.c 프로젝트: martres/42sh
void		update_pwd(t_link *link, char *new_pwd, char *input)
{
  char		*old_pwd;
  char		*cmd[4];

  old_pwd = get_pwd();
  if (!chdir(new_pwd))
    {
      cmd[0] = "";
      cmd[1] = "PWD";
      cmd[2] = new_pwd;
      cmd[3] = NULL;
      builtin_setenv(link, cmd);
      cmd[1] = "OLDPWD";
      cmd[2] = old_pwd;
      builtin_setenv(link, cmd);
    }
  else
    {
      my_printf("42sh: cd: %s: No such file or directory\n", input);
      free(new_pwd);
    }
  free(old_pwd);
}
예제 #5
0
파일: setenv.c 프로젝트: cohen-h/projects
int	my_setenv(t_system *sys)
{
  int	tmp;
  char	*path;
  int	ac;

  ac = wordtab_len(sys->cmd->cmd);
  if (ac == 1)
    return (my_env(sys));
  tmp = builtin_setenv(&(sys->env),
		       sys->cmd->cmd[1], ac > 2 ? sys->cmd->cmd[2] : "");
  path = my_getenv(sys->env, "PATH");
  if (path)
    sys->path = my_str_to_wordtab(path, 0, 0);
  return (tmp);
}
예제 #6
0
void	increment_shlvl(char ***env)
{
	int		n;
	char	**str;

	if (get_in_env(*env, "SHLVL"))
	{
		n = ft_atoi(get_in_env(*env, "SHLVL"));
		str = ft_memalloc(sizeof(char*) * 3);
		str[0] = ft_strdup("setenv");
		str[1] = ft_strnew(20);
		str[1] = ft_strcat(str[1], "SHLVL=");
		str[1] = ft_strcat(str[1], ft_itoa(++n));
		builtin_setenv(str, env);
		ft_tabfree(str);
	}
}