コード例 #1
0
ファイル: process.c プロジェクト: Kafei59/epitech-projects
void		my_cmd(t_list *list, char *s, char **env, int i)
{
  char		*epur_s;
  char		**tab;

  epur_s = epur_str(s);
  tab = my_str_to_wordtab(epur_s, &i);
  if ((my_builtin(list, s, tab, env)) == 0 &&		\
      check_redir(epur_s, tab, env, i) == 0)
      my_fork(tab[0], tab, env);
  if (check_env(tab, env) == 1)
    env = env_cpy(list);
  check_recurs(list, s, env, i - 1);
  my_mini_free(epur_s, tab);
}
コード例 #2
0
ファイル: process.c プロジェクト: Kafei59/epitech-projects
void		child_process(char *s, char **tab, char **env)
{
  int		i;

  my_builtin(s, env);
  my_alias(s, tab, env);
  my_execution(tab, env);
  if (s[0] != 'c' || s[1] != 'd')
    {
      i = -1;
      while (env[++i])
      	free(env[i]);
      i = -1;
      while (tab[++i])
      	free(tab[i]);
      my_spec_error(s);
    }
  free(tab);
  free(env);
  exit(EXIT_SUCCESS);
}
コード例 #3
0
static int      my_pipe_piped(t_datas *datas, t_cmd *cmd, int fdin, int *pfd)
{
  int           res;

  res = 0;
  if (cmd->prev != NULL)
    {
      if (dup2(fdin, 0) < 0)
        exit(my_error(FTSH_NAME, "pipe error", "input"));
    }
  if (cmd->next != NULL)
    {
      if (dup2(pfd[1], 1) < 0)
        exit(my_error(FTSH_NAME, "pipe error", "output"));
      close(pfd[0]);
    }
  if ((res = my_builtin(datas, &(cmd->args))) != 42)
    return (res);
  if (cmd->exe == NULL)
    exit(my_error(cmd->args[0], "command not found.", NULL));
  if ((res = execve(cmd->exe, cmd->args, datas->env)) < 0)
    exit(my_error(FTSH_NAME, "execution failed", cmd->str));
  return (res);
}