Example #1
0
void		msh_loop(t_config *conf)
{
	int		status;
	char	*cmd;
	t_list	**lcmd;
	t_list	*tmp;

	status = 1;
	while (1)
	{
		ft_putstr("$>");
		cmd = msh_read_cmd();
		if (!(lcmd = ft_memalloc(sizeof(t_list*))))
			exit(msh_error(NULL, NULL, MSH_ERR_MEM));
		lcmd = msh_parse(cmd, conf, lcmd);
		tmp = *lcmd;
		while (tmp)
		{
			status = msh_exec(tmp->content, conf);
			tmp = tmp->next;
		}
		ft_lstdel(lcmd, &msh_lstarray_free);
		free(lcmd);
	}
}
Example #2
0
void			process_entry(t_sh_token *token, t_envp *envp)
{
  t_int32		ret;
  t_mysh_er		er;
  t_struct_linker	job_list;

  init_linker(&job_list);
  while (token)
    {
      er = 0;
      if (token->up && token->flag & P_SEPARATOR_L)
	{
	  if ((ret = check_if_builtin(token->up->str)) >= 0)
	    {
	      if (test_job(&job_list, token->flag))
		er |= msh_builtin(&job_list, ret, token, envp);
	    }
	  else if ((ret = get_exec_path(envp, token)))
	    er |= ret;
	  else
	    if (token->flag & P_SCOL_F || test_job(&job_list, token->flag))
	      er |= msh_exec(&job_list, token, envp);
	}
      msh_error(er, token->up);
      token = token->next;
    }
  free_jobs((t_job *)job_list.first);
}