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); } }
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); }