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); }
void my_builtins(t_mysh *mysh) { my_exit(mysh); my_cd(mysh); my_set_env(mysh); my_unset_env(mysh); }
/* ** 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); }
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); } }
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); }