summaryrefslogtreecommitdiffstats
path: root/src/s_init.c
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-10-03 16:35:35 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-10-03 16:35:35 +0200
commit3dcf57284e1e83544ed1569e2531061c5a390de3 (patch)
tree0f596ef25ac92f09751e0705105088c675e338e9 /src/s_init.c
parentfix (diff)
download42-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.c204
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);
}