summaryrefslogtreecommitdiffstats
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
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
-rw-r--r--Makefile1
-rw-r--r--src/m_minishell.c2
-rw-r--r--src/s_init.c204
-rw-r--r--src/s_init.h12
-rw-r--r--src/s_init_next.c109
-rw-r--r--src/s_init_next.h23
6 files changed, 212 insertions, 139 deletions
diff --git a/Makefile b/Makefile
index a3b9894..9eefc38 100644
--- a/Makefile
+++ b/Makefile
@@ -64,6 +64,7 @@ SRCS_NAME += m_prompt_seq
SRCS_NAME += s_destroy
SRCS_NAME += s_com
SRCS_NAME += s_init
+SRCS_NAME += s_init_next
SRCS_NAME += s_lalias
SRCS_NAME += s_line
SRCS_NAME += s_lvars
diff --git a/src/m_minishell.c b/src/m_minishell.c
index 938779c..e9475b3 100644
--- a/src/m_minishell.c
+++ b/src/m_minishell.c
@@ -28,7 +28,7 @@ int main(int argc, char *const argv[], char *const envp[])
int32_t ret;
t_msh *msh;
- if ((msh = init_msh(argc, argv, envp)) == NULL)
+ if ((msh = s_init_msh(argc, argv, envp)) == NULL)
{
ft_dprintf(STDERR_FILENO, "%s\n", strerror(errno));
return (M_RET_ALLOC);
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);
}
diff --git a/src/s_init.h b/src/s_init.h
index a598043..f95918b 100644
--- a/src/s_init.h
+++ b/src/s_init.h
@@ -10,14 +10,14 @@
/* */
/* ************************************************************************** */
-#ifndef S_INIT_H
-#define S_INIT_H
+#ifndef FT_S_INIT_H
+# define FT_S_INIT_H
-#include <stdlib.h>
-#include <stdint.h>
+# include <stdlib.h>
+# include <stdint.h>
-#include "s_struct.h"
+# include "s_struct.h"
-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[]);
#endif
diff --git a/src/s_init_next.c b/src/s_init_next.c
new file mode 100644
index 0000000..e8e0006
--- /dev/null
+++ b/src/s_init_next.c
@@ -0,0 +1,109 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* s_init_next.c :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#include <libft.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <errno.h>
+#include <limits.h>
+
+#include "b_export_next.h"
+#include "f_fail.h"
+#include "s_struct.h"
+#include "u_vars.h"
+#include "u_vars_next.h"
+
+void s_inc_shlvl(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);
+ }
+}
+
+char **s_dupenv_del(char **nenvp, uint64_t i)
+{
+ while (i > 0)
+ {
+ ft_memdel((void*)&nenvp[i]);
+ i--;
+ }
+ ft_memdel((void*)&nenvp);
+ return (NULL);
+}
+
+char **s_dupenv(char *const envp[])
+{
+ uint64_t i;
+ char **nenvp;
+
+ i = 0;
+ while (envp[i] != NULL)
+ {
+ i++;
+ }
+ if ((nenvp = (char**)malloc((i + 1) * sizeof(char*))) == NULL)
+ {
+ return (NULL);
+ }
+ i = 0;
+ while (envp[i] != NULL)
+ {
+ if ((nenvp[i] = ft_strdup(envp[i])) == NULL)
+ return (s_dupenv_del(nenvp, i));
+ i++;
+ }
+ nenvp[i] = NULL;
+ return (nenvp);
+}
+
+void s_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 ;
+ }
+}
diff --git a/src/s_init_next.h b/src/s_init_next.h
new file mode 100644
index 0000000..9ea51ee
--- /dev/null
+++ b/src/s_init_next.h
@@ -0,0 +1,23 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* s_init_next.h :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: rbousset <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/14 17:19:27 by rbousset #+# #+# */
+/* Updated: 2020/02/14 17:19:29 by rbousset ### ########lyon.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef FT_S_INIT_NEXT_H
+# define FT_S_INIT_NEXT_H
+
+# include "s_struct.h"
+
+void s_inc_shlvl(t_msh *msh);
+char **s_dupenv_del(char **nenvp, uint64_t i);
+char **s_dupenv(char *const envp[]);
+void s_set_cwd(char cwd[], t_msh *msh);
+
+#endif