Esempio n. 1
0
File: pars.c Progetto: desomb/42sh
t_pars		*my_pars(t_struct *struc, char ***env, t_pars *pars)
{
  int	pid;

  if (*env == NULL)
    return (error_env(pars));
  if ((my_pars_check(pars, struc)) == 1)
    {
      pars->last_op = struc->operateur;
      pars->tab = my_str_to_wordtab(struc->instruction);
      if ((my_echo_check(pars, struc, *env, pid)) == NULL)
	return (pars);
      pars = my_echo_check(pars, struc, *env, pid);
      pars = my_path_remp(struc, *env, pars, 0);
      if (my_strcmp(pars->tab[0], "cd") == 0)
	env = my_cd(pars->tab, env);
      else if (pars->path != NULL)
	{
	  pid = fork();
	  if (pid == 0)
	    pars = pars_norme(struc, pars, env);
	  wait(&pid);
	}
      else
	pars = error_execve(struc->instruction, pars);
    }
  return (pars);
}
Esempio n. 2
0
void my_builtins(t_mysh *mysh)
{
  my_exit(mysh);
  my_cd(mysh);
  my_set_env(mysh);
  my_unset_env(mysh);
}
Esempio n. 3
0
/*
** brief: we will try to find the good command
** @env: our env list
** @arr: contain the command and values
** return: 1 if we found our cmd but it's not cd, 0 if the cmd is not found
** and 2 if we have change the dir and 43 if exit
*/
static int	_my_builtin_fun(char **arr, t_list *env)
{
  char		*pwd;

  if (my_strcmp(arr[0], "exit", 0))
    return (my_exit(env, arr));
  else if (my_strcmp(arr[0], "env", 0))
    my_env(env, arr);
  else if (my_strcmp(arr[0], "cd", 0))
    return (my_cd(arr) + 1);
  else if (my_strcmp(arr[0], "pwd", 0))
    {
      pwd = my_find_element(env, "PWD");
      write(1, pwd, my_strlen(pwd));
      write(1, "\n", 1);
      return (1);
    }
  else if (my_strcmp(arr[0], "setenv", 0))
    my_setenv(env, arr);
  else if (my_strcmp(arr[0], "unsetenv", 0))
    my_unsetenv(env, arr);
  else
    return (0);
  return (1);
}
Esempio n. 4
0
void		parent_process(char **env)
{
  pid_t		pid;
  char		*s;
  char		**tab;

  while ((s = get_next_line(0)) != NULL)
    {
      if (my_strcmp("exit", s) == 0)
	exit(EXIT_SUCCESS);
      signal(SIGINT, SIG_IGN);
      tab = my_str_to_wordtab(s);
      my_cd(s, tab, env);
      if (s[0] != 'c' || s[1] != 'd')
	pid = fork();
      if (pid == 0 && (s[0] != 'c' || s[1] != 'd'))
        child_process(s, tab, env);
      else if (pid == -1)
        my_error("Impossible to create a child process");
      else
        {
	  waitpid(pid, 0, WSTOPPED);
          my_putstr("$> ");
        }
      free(s);
      free(tab);
    }
}
Esempio n. 5
0
int	check_builtins(t_main *list, t_main **env)
{
  if (strcmp(list->str, "cd") == 0)
    my_cd(list, *env);
  else if (strcmp(list->str, "env") == 0)
    show_env(*env);
  else if (strcmp(list->str, "setenv") == 0)
    my_setenv(list, env);
  else if (strcmp(list->str, "unsetenv") == 0)
    my_unsetenv(list, env);
  else if (strcmp(list->str, "exit") == 0)
    my_exit(list);
  else if (strcmp(list->str, "echo") == 0)
    my_echo(list);
  else if (strcmp(list->str, "..") == 0)
    my_cd(manage_double_dots(&list), *env);
  else
    return (0);
  return (1);
}