diff options
author | JozanLeClerc <bousset.rudy@gmail.com> | 2020-10-03 16:35:35 +0200 |
---|---|---|
committer | JozanLeClerc <bousset.rudy@gmail.com> | 2020-10-03 16:35:35 +0200 |
commit | 3dcf57284e1e83544ed1569e2531061c5a390de3 (patch) | |
tree | 0f596ef25ac92f09751e0705105088c675e338e9 /src/s_init.c | |
parent | fix (diff) | |
download | 42-minishell-3dcf57284e1e83544ed1569e2531061c5a390de3.tar.gz 42-minishell-3dcf57284e1e83544ed1569e2531061c5a390de3.tar.bz2 42-minishell-3dcf57284e1e83544ed1569e2531061c5a390de3.tar.xz 42-minishell-3dcf57284e1e83544ed1569e2531061c5a390de3.tar.zst 42-minishell-3dcf57284e1e83544ed1569e2531061c5a390de3.zip |
Normed s_init
Diffstat (limited to 'src/s_init.c')
-rw-r--r-- | src/s_init.c | 204 |
1 files changed, 72 insertions, 132 deletions
diff --git a/src/s_init.c b/src/s_init.c index 1ce73dd..0842f7c 100644 --- a/src/s_init.c +++ b/src/s_init.c @@ -15,173 +15,113 @@ #include <stdlib.h> #include <unistd.h> #include <limits.h> -#include <dirent.h> -#include <errno.h> #include "b_export_next.h" #include "d_define.h" #include "f_fail.h" #include "m_funptr.h" -#include "s_init.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) +static void s_init_sqb_ref_one(t_msh *msh) { - ft_memcpy(msh->sqb_ref[B_ID_SQB_B], B_SQB_B, ft_strlen(B_SQB_B) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_C], B_SQB_C, ft_strlen(B_SQB_C) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_D], B_SQB_D, ft_strlen(B_SQB_D) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_E], B_SQB_E, ft_strlen(B_SQB_E) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_F], B_SQB_F, ft_strlen(B_SQB_F) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_H], B_SQB_H, ft_strlen(B_SQB_H) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_N], B_SQB_N, ft_strlen(B_SQB_N) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_P], B_SQB_P, ft_strlen(B_SQB_P) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_R], B_SQB_R, ft_strlen(B_SQB_R) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_S], B_SQB_S, ft_strlen(B_SQB_S) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_W], B_SQB_W, ft_strlen(B_SQB_W) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_X], B_SQB_X, ft_strlen(B_SQB_X) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_Z], B_SQB_Z, ft_strlen(B_SQB_Z) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_L_MAJ], - B_SQB_L_MAJ, ft_strlen(B_SQB_L_MAJ) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_S_MAJ], - B_SQB_S_MAJ, ft_strlen(B_SQB_S_MAJ) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_NT], B_SQB_NT, ft_strlen(B_SQB_NT) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_OT], B_SQB_OT, ft_strlen(B_SQB_OT) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_EQUA], - B_SQB_EQUA, ft_strlen(B_SQB_EQUA) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_DIFF], - B_SQB_DIFF, ft_strlen(B_SQB_DIFF) + 1); + (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) +static void s_init_sqb_ref_two(t_msh *msh) { - ft_memcpy(msh->sqb_ref[B_ID_SQB_EQ], B_SQB_EQ, ft_strlen(B_SQB_EQ) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_NE], B_SQB_NE, ft_strlen(B_SQB_NE) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_GT], B_SQB_GT, ft_strlen(B_SQB_GT) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_GE], B_SQB_GE, ft_strlen(B_SQB_GE) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_LT], B_SQB_LT, ft_strlen(B_SQB_LT) + 1); - ft_memcpy(msh->sqb_ref[B_ID_SQB_LE], B_SQB_LE, ft_strlen(B_SQB_LE) + 1); + (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 char - **dupenv_del(char **nenvp, - uint64_t i) +static void s_init_sqb_ref_thr(t_msh *msh) { - while (i > 0) - { - ft_memdel((void*)&nenvp[i]); - i--; - } - ft_memdel((void*)&nenvp); - return (NULL); -} - -static char - **dupenv(char *const envp[]) -{ - uint64_t i; - char **nenvp; - - i = 0; - while (envp[i]) - { - i++; - } - if (!(nenvp = (char**)malloc((i + 1) * sizeof(char*)))) - { - return (NULL); - } - i = 0; - while (envp[i]) - { - if (!(nenvp[i] = ft_strdup(envp[i]))) - return (dupenv_del(nenvp, i)); - i++; - } - nenvp[i] = NULL; - return (nenvp); + (void)ft_memcpy(msh->sqb_ref[B_ID_SQB_LE], B_SQB_LE, + (ft_strlen(B_SQB_LE) + 1) * sizeof(char)); } -static void - inc_shlvl(t_msh *msh) +static void s_null_some(t_msh *msh) { - char fmt[8]; - char tmp[255]; - char str[255]; - int32_t shlvl; - - u_get_var_value(tmp, "$SHLVL", 255, msh); - if (tmp[0] == C_NUL) - { - ft_memcpy(fmt, "SHLVL=1", 8); - b_export_with_equals(fmt, msh); - } - else - { - shlvl = ft_atoi(tmp); - if (shlvl >= 999) - f_shlvl_too_high(shlvl); - shlvl = (shlvl >= 999) ? 0 : shlvl; - shlvl = (shlvl < 0) ? 0 : shlvl + 1; - ft_itoa_s(str, shlvl); - u_subst_var_value("$SHLVL", str, msh); - } -} - -static void - set_cwd(char cwd[], t_msh *msh) -{ - char fmt[PATH_MAX]; - DIR *dir; - - u_get_var_value(cwd, "$PWD", PATH_MAX, msh); - if (cwd[0] == C_NUL) - { - getcwd(cwd, PATH_MAX); - ft_sprintf(fmt, "%s=%s", "PWD", cwd); - b_export_with_equals(fmt, msh); - return ; - } - if ((dir = opendir(cwd)) != NULL) - closedir(dir); - else if (errno == ENOENT) - { - getcwd(cwd, PATH_MAX); - ft_sprintf(fmt, "%s=%s", "PWD", cwd); - b_export_with_equals(fmt, msh); - return ; - } + msh->fd = 0; + msh->curr = NULL; + msh->com = NULL; + msh->pipes = NULL; + msh->vars = NULL; + msh->alias = NULL; + msh->prev_hist = NULL; } -t_msh *init_msh(int32_t argc, char *const argv[], char *const envp[]) +t_msh *s_init_msh(int32_t argc, char *const argv[], char *const envp[]) { - char cwd[PATH_MAX]; t_msh *msh; + char cwd[PATH_MAX]; if ((msh = (t_msh*)malloc(sizeof(t_msh))) == NULL) return (NULL); msh->envp = NULL; - if ((msh->envp = dupenv(envp)) == NULL) + if ((msh->envp = s_dupenv(envp)) == NULL) return (NULL); msh->argc = argc - 1; msh->argv = (char**)argv; msh->ret = 0; init_buptr(msh); - msh->fd = 0; - msh->curr = NULL; - msh->com = NULL; - msh->pipes = NULL; - msh->vars = NULL; - msh->alias = NULL; - msh->prev_hist = NULL; - set_cwd(cwd, msh); + s_null_some(msh); + s_set_cwd(cwd, msh); if ((msh->cwd = ft_strdup(cwd)) == NULL) + { + ft_memdel((void*)&msh); return (NULL); + } msh->env_fork_tmp[0][0] = '\0'; - inc_shlvl(msh); + s_inc_shlvl(msh); s_init_sqb_ref_one(msh); s_init_sqb_ref_two(msh); + s_init_sqb_ref_thr(msh); return (msh); } |