/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* s_init.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: rbousset +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */ /* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */ /* */ /* ************************************************************************** */ #include #ifdef __linux__ # include #else # include #endif #include #include #include "b_export_next.h" #include "d_define.h" #include "f_fail.h" #include "m_funptr.h" #include "s_init_next.h" #include "u_vars.h" #include "u_vars_next.h" static void s_init_sqb_ref_one(t_msh *msh) { (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_B], B_SQB_B, (ft_strlen(B_SQB_B) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_C], B_SQB_C, (ft_strlen(B_SQB_C) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_D], B_SQB_D, (ft_strlen(B_SQB_D) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_E], B_SQB_E, (ft_strlen(B_SQB_E) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_F], B_SQB_F, (ft_strlen(B_SQB_F) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_H], B_SQB_H, (ft_strlen(B_SQB_H) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_N], B_SQB_N, (ft_strlen(B_SQB_N) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_P], B_SQB_P, (ft_strlen(B_SQB_P) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_R], B_SQB_R, (ft_strlen(B_SQB_R) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_S], B_SQB_S, (ft_strlen(B_SQB_S) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_W], B_SQB_W, (ft_strlen(B_SQB_W) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_X], B_SQB_X, (ft_strlen(B_SQB_X) + 1) * sizeof(char)); } static void s_init_sqb_ref_two(t_msh *msh) { (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_Z], B_SQB_Z, (ft_strlen(B_SQB_Z) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_L_MAJ], B_SQB_L_MAJ, (ft_strlen(B_SQB_L_MAJ) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_S_MAJ], B_SQB_S_MAJ, (ft_strlen(B_SQB_S_MAJ) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_NT], B_SQB_NT, (ft_strlen(B_SQB_NT) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_OT], B_SQB_OT, (ft_strlen(B_SQB_OT) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_EQUA], B_SQB_EQUA, (ft_strlen(B_SQB_EQUA) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_DIFF], B_SQB_DIFF, (ft_strlen(B_SQB_DIFF) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_EQ], B_SQB_EQ, (ft_strlen(B_SQB_EQ) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_NE], B_SQB_NE, (ft_strlen(B_SQB_NE) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_GT], B_SQB_GT, (ft_strlen(B_SQB_GT) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_GE], B_SQB_GE, (ft_strlen(B_SQB_GE) + 1) * sizeof(char)); (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_LT], B_SQB_LT, (ft_strlen(B_SQB_LT) + 1) * sizeof(char)); } static void s_init_sqb_ref_thr(t_msh *msh) { (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_LE], B_SQB_LE, (ft_strlen(B_SQB_LE) + 1) * sizeof(char)); } static void s_null_some(t_msh *msh) { msh->fd = 0; msh->curr = NULL; msh->com = NULL; msh->pipes = NULL; msh->vars = NULL; msh->alias = NULL; msh->prev_hist = NULL; } t_msh *s_init_msh(int argc, char *const argv[], char *const envp[]) { t_msh *msh; char cwd[PATH_MAX]; if ((msh = (t_msh*)malloc(sizeof(t_msh))) == NULL) return (NULL); msh->envp = NULL; (void)envp; if ((msh->envp = s_dupenv(envp)) == NULL) { ft_memdel((void*)&msh); return (NULL); } msh->argc = argc - 1; msh->argv = (char**)argv; msh->ret = 0; m_init_buptr(msh); s_null_some(msh); s_set_cwd(cwd, msh); if (cwd[0] != C_NUL && (msh->cwd = ft_strdup(cwd)) == NULL) { ft_delwords(msh->envp); ft_memdel((void*)&msh); return (NULL); } msh->env_fork_tmp[0][0] = '\0'; if (s_inc_shlvl(msh) == 1) { ft_memdel((void*)&msh->cwd); ft_memdel((void*)&msh); return (NULL); } s_init_sqb_ref_one(msh); s_init_sqb_ref_two(msh); s_init_sqb_ref_thr(msh); return (msh); }