summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJozanLeClerc <bousset.rudy@gmail.com>2020-07-30 20:30:58 +0200
committerJozanLeClerc <bousset.rudy@gmail.com>2020-07-30 20:30:58 +0200
commitc19bd35afdb45e49cebdfd96e7adb1e6fe477f0c (patch)
treec5a7655d5fa858da43b0c9e3f1f616d269aae172 /src
parentWork in progress, freed leak (diff)
download42-minishell-c19bd35afdb45e49cebdfd96e7adb1e6fe477f0c.tar.gz
42-minishell-c19bd35afdb45e49cebdfd96e7adb1e6fe477f0c.tar.bz2
42-minishell-c19bd35afdb45e49cebdfd96e7adb1e6fe477f0c.tar.xz
42-minishell-c19bd35afdb45e49cebdfd96e7adb1e6fe477f0c.tar.zst
42-minishell-c19bd35afdb45e49cebdfd96e7adb1e6fe477f0c.zip
Double exit no more
Diffstat (limited to '')
-rw-r--r--src/b_cd.c8
-rw-r--r--src/b_env.c2
-rw-r--r--src/b_exit.c7
-rw-r--r--src/b_export.c2
-rw-r--r--src/b_type.c2
-rw-r--r--src/d_define.h5
-rw-r--r--src/e_builtins.c61
-rw-r--r--src/e_externs.c14
-rw-r--r--src/e_externs_next.c4
-rw-r--r--src/e_externs_pipes.c4
-rw-r--r--src/f_chdir.c2
-rw-r--r--src/f_chdir.h2
-rw-r--r--src/f_com.c23
-rw-r--r--src/f_com.h20
-rw-r--r--src/f_fail.c8
-rw-r--r--src/f_fail.h9
-rw-r--r--src/m_funptr.c2
-rw-r--r--src/m_loop.c1
-rw-r--r--src/p_line.c2
-rw-r--r--src/u_vars.c10
20 files changed, 91 insertions, 97 deletions
diff --git a/src/b_cd.c b/src/b_cd.c
index c892f7e..f30e61f 100644
--- a/src/b_cd.c
+++ b/src/b_cd.c
@@ -28,7 +28,7 @@ static void
if (!(*path = ft_strdup(*args)))
{
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
if (!ft_strncmp("~/", *path, 2) || !ft_strncmp("~", *path, 2))
{
@@ -36,7 +36,7 @@ static void
"~", u_get_var_value("$HOME", msh))))
{
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
}
}
@@ -50,7 +50,7 @@ uint8_t
if (argc >= 2)
{
- fail_too_many_args("cd", msh);
+ f_fail_too_many_args("cd", msh);
return (1);
}
else if (argc == 0)
@@ -62,7 +62,7 @@ uint8_t
set_path(&path, args, msh);
if (chdir(path) != 0)
{
- fail_chd("cd", path, msh);
+ f_fail_chd("cd", path, msh);
ft_memdel((void*)&path);
return (1);
}
diff --git a/src/b_env.c b/src/b_env.c
index 08adaf5..8f0a974 100644
--- a/src/b_env.c
+++ b/src/b_env.c
@@ -24,7 +24,7 @@ uint8_t
if (args && args[0])
{
- fail_no_options("env", msh);
+ f_fail_no_options("env", msh);
return (127);
}
ptr = msh->envp;
diff --git a/src/b_exit.c b/src/b_exit.c
index 777bbb9..5f1c446 100644
--- a/src/b_exit.c
+++ b/src/b_exit.c
@@ -28,10 +28,9 @@ uint8_t
uint8_t ret;
const uint64_t argc = get_argc((const char**)args);
- ret = 0;
if (argc > 1)
{
- fail_too_many_args("exit", msh);
+ f_fail_too_many_args("exit", msh);
return (1);
}
if (argc == 1)
@@ -39,7 +38,11 @@ uint8_t
ret = ft_atoi(args[0]);
/* TODO: non numeric args[0] */
}
+ else
+ ret = msh->ret;
ft_dprintf(STDERR_FILENO, "exit\n");
+ lcom_clear(&msh->curr);
+ s_destroy(msh);
exit(ret);
return (0);
}
diff --git a/src/b_export.c b/src/b_export.c
index 95ccf40..9cb1c14 100644
--- a/src/b_export.c
+++ b/src/b_export.c
@@ -68,7 +68,7 @@ uint8_t
next = 0;
if (!check_valid_identifier(*ptr))
{
- fail_identifier("export", *ptr, msh);
+ f_fail_identifier("export", *ptr, msh);
next = 1;
r = 1;
}
diff --git a/src/b_type.c b/src/b_type.c
index ccaca43..00bad1a 100644
--- a/src/b_type.c
+++ b/src/b_type.c
@@ -57,7 +57,7 @@ static char
if (!(fullpath = ft_strdup(com)))
{
lcom_clear(&msh->curr);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
return (fullpath);
}
diff --git a/src/d_define.h b/src/d_define.h
index 6f93751..b2f2f08 100644
--- a/src/d_define.h
+++ b/src/d_define.h
@@ -42,7 +42,8 @@
** ====== FAIL MSG ======
*/
-#define FT_FAIL_NO_OPTIONS "no options required"
-#define FT_FAIL_TOO_MANY_ARGS "too many arguments"
+#define FT_FAIL_COMMAND_NOT_FOUND "command not found"
+#define FT_FAIL_NO_OPTIONS "no options required"
+#define FT_FAIL_TOO_MANY_ARGS "too many arguments"
#endif
diff --git a/src/e_builtins.c b/src/e_builtins.c
index ca512a3..fe4f7e1 100644
--- a/src/e_builtins.c
+++ b/src/e_builtins.c
@@ -21,51 +21,6 @@
#include "s_lcom.h"
#include "s_struct.h"
-/* static void */
-/* e_builtin_child(const t_lcom *ptr, */
-/* uint8_t bu_id, */
-/* t_msh *msh) */
-/* { */
-/* int32_t ret; */
-
-/* dup_redirs(ptr, msh); */
-/* ret = msh->bu_ptr[bu_id](ptr->argv + 1, msh); */
-/* lcom_clear(&msh->curr); */
-/* s_destroy(msh); */
-/* exit(ret); */
-/* } */
-
-/* static void */
-/* e_builtin_parent(pid_t pid, */
-/* const t_lcom *ptr, */
-/* uint8_t bu_id, */
-/* t_msh *msh) */
-/* { */
-/* int32_t status; */
-/* int32_t ret; */
-
-/* while (wait(&status) != pid) */
-/* ; */
-/* ret = WEXITSTATUS(status); */
-/* if (bu_id != FT_ID_EXIT) */
-/* msh->ret = ret; */
-/* if (bu_id == FT_ID_CD && msh->ret == 0) */
-/* { */
-/* msh->bu_ptr[bu_id](ptr->argv + 1, msh); */
-/* /\* TODO: export $PWD *\/ */
-/* } */
-/* else if (bu_id == FT_ID_EXIT && ret == 0) */
-/* { */
-/* if (ptr->argv[1]) */
-/* ret = ft_atoi(ptr->argv[1]); */
-/* else */
-/* ret = msh->ret; */
-/* lcom_clear(&msh->curr); */
-/* s_destroy(msh); */
-/* exit(ret); */
-/* } */
-/* } */
-
void
e_builtin(const t_lcom *ptr,
uint8_t bu_id,
@@ -77,20 +32,4 @@ void
ret = msh->bu_ptr[bu_id](ptr->argv + 1, msh);
lcom_clear(&msh->curr);
msh->ret = ret;
- /* pid_t pid; */
-
- /* /\* TODO: find a way to handle exit | bu_id = 6 *\/ */
- /* e_builtin_child(ptr, bu_id, msh); */
- /* if ((pid = fork()) == 0) */
- /* { */
- /* e_builtin_child(ptr, bu_id, msh); */
- /* } */
- /* else if (pid < 0) */
- /* { */
- /* /\* TODO: handle fork failed *\/ */
- /* } */
- /* else */
- /* { */
- /* e_builtin_parent(pid, ptr, bu_id, msh); */
- /* } */
}
diff --git a/src/e_externs.c b/src/e_externs.c
index d7c4854..3d55fa9 100644
--- a/src/e_externs.c
+++ b/src/e_externs.c
@@ -17,6 +17,7 @@
#include <unistd.h>
#include "e_externs_next.h"
+#include "f_fail.h"
#include "m_redirs.h"
#include "s_destroy.h"
#include "s_lcom.h"
@@ -72,8 +73,15 @@ void
{
fullpath = search_in_path(ptr->com, envpath, msh);
ft_delwords(envpath);
+ if (fullpath == NULL)
+ {
+ f_fail_command_not_found(ptr->com);
+ /* TODO: deal if not found etc */
+ }
+ else
+ {
+ exec_path(fullpath, ptr, msh);
+ ft_memdel((void*)&fullpath);
+ }
}
- /* TODO: deal if not found etc */
- exec_path(fullpath, ptr, msh);
- ft_memdel((void*)&fullpath);
}
diff --git a/src/e_externs_next.c b/src/e_externs_next.c
index ba3c2d5..e33405c 100644
--- a/src/e_externs_next.c
+++ b/src/e_externs_next.c
@@ -33,7 +33,7 @@ static char
{
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
(void)ft_memcpy(fullpath, p_path, path_len);
*(fullpath + (path_len)) = '/';
@@ -97,7 +97,7 @@ char
{
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
return (envpath);
}
diff --git a/src/e_externs_pipes.c b/src/e_externs_pipes.c
index c8f8404..a5ee696 100644
--- a/src/e_externs_pipes.c
+++ b/src/e_externs_pipes.c
@@ -122,7 +122,7 @@ void
rptr = ptr;
pipes = e_get_pipes_count(head);
if (!(fullpath = (char **)malloc((pipes + 2) * sizeof(char *))))
- fail_alloc(msh);
+ f_fail_alloc(msh);
fullpath[pipes + 1] = NULL;
i = 0;
while (rptr != NULL)
@@ -130,7 +130,7 @@ void
if (ft_ischarset("/.", rptr->one->com[0]))
{
if (!(fullpath[i] = ft_strdup(rptr->one->com)))
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
else if ((envpath = get_env_path(msh)) != NULL)
{
diff --git a/src/f_chdir.c b/src/f_chdir.c
index 6bb0497..4623c82 100644
--- a/src/f_chdir.c
+++ b/src/f_chdir.c
@@ -18,7 +18,7 @@
#include "s_struct.h"
void
- fail_chd(const char concern[],
+ f_fail_chd(const char concern[],
const char path[],
t_msh *msh)
{
diff --git a/src/f_chdir.h b/src/f_chdir.h
index be9773b..76cb737 100644
--- a/src/f_chdir.h
+++ b/src/f_chdir.h
@@ -15,7 +15,7 @@
#include "s_struct.h"
-void fail_chd(const char concern[],
+void f_fail_chd(const char concern[],
const char pathp[],
t_msh *msh);
diff --git a/src/f_com.c b/src/f_com.c
new file mode 100644
index 0000000..9c4e02a
--- /dev/null
+++ b/src/f_com.c
@@ -0,0 +1,23 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* f_com.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 <unistd.h>
+
+#include "d_define.h"
+#include "s_struct.h"
+
+void
+ f_fail_command_not_found(const char command[])
+{
+ ft_dprintf(STDERR_FILENO, "%s: %s: %s\n", "minishell", command, FT_FAIL_COMMAND_NOT_FOUND);
+}
diff --git a/src/f_com.h b/src/f_com.h
new file mode 100644
index 0000000..12023f6
--- /dev/null
+++ b/src/f_com.h
@@ -0,0 +1,20 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* f_com.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 F_COM_H
+#define F_COM_H
+
+#include "s_struct.h"
+
+void f_fail_command_not_found(const char command[]);
+
+#endif
diff --git a/src/f_fail.c b/src/f_fail.c
index aae00fb..a3a1df1 100644
--- a/src/f_fail.c
+++ b/src/f_fail.c
@@ -28,14 +28,14 @@ static void
}
void
- fail_no_options(const char concern[],
+ f_fail_no_options(const char concern[],
t_msh *msh)
{
write_fail(concern, FT_FAIL_NO_OPTIONS, msh);
}
void
- fail_identifier(const char concern[],
+ f_fail_identifier(const char concern[],
const char identifier[],
t_msh *msh)
{
@@ -44,14 +44,14 @@ void
}
void
- fail_too_many_args(const char concern[],
+ f_fail_too_many_args(const char concern[],
t_msh *msh)
{
write_fail(concern, FT_FAIL_TOO_MANY_ARGS, msh);
}
void
- fail_alloc(t_msh *msh)
+ f_fail_alloc(t_msh *msh)
{
ft_dprintf(STDERR_FILENO, "%s: %s\n", msh->shname, strerror(errno));
exit(FT_RET_ALLOC);
diff --git a/src/f_fail.h b/src/f_fail.h
index 9699eee..868fe75 100644
--- a/src/f_fail.h
+++ b/src/f_fail.h
@@ -13,18 +13,19 @@
#ifndef F_FAIL_H
#define F_FAIL_H
+#include "f_com.h"
#include "f_chdir.h"
#include "f_errno.h"
#include "f_redir.h"
#include "s_struct.h"
-void fail_no_options(const char concern[],
+void f_fail_no_options(const char concern[],
t_msh *msh);
-void fail_too_many_args(const char concern[],
+void f_fail_too_many_args(const char concern[],
t_msh *msh);
-void fail_identifier(const char concern[],
+void f_fail_identifier(const char concern[],
const char identifier[],
t_msh *msh);
-void fail_alloc(t_msh *msh);
+void f_fail_alloc(t_msh *msh);
#endif
diff --git a/src/m_funptr.c b/src/m_funptr.c
index 5a02b2e..3bd0969 100644
--- a/src/m_funptr.c
+++ b/src/m_funptr.c
@@ -32,6 +32,6 @@ void
msh->bu_ptr[7] = b_type;
if (!(msh->bu_ref = ft_split(FT_BUILTINS, '|')))
{
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
}
diff --git a/src/m_loop.c b/src/m_loop.c
index fe3fbcd..143c25d 100644
--- a/src/m_loop.c
+++ b/src/m_loop.c
@@ -114,7 +114,6 @@ uint8_t
/* TODO: (null): Bad address on "msh ~> echo a > asd; cat < asd" but not on "msh ~> echo a > asd; cat asd" */
/* TODO: GNL 25 leak on "msh ~> exit" | gl hf */
/* TODO: "msh ~> some command \": re GNL into ft_nrealloc */
- /* TODO: the chad pipes | */
/* TODO: a histfile would be nice */
}
else
diff --git a/src/p_line.c b/src/p_line.c
index 4a58537..aafc900 100644
--- a/src/p_line.c
+++ b/src/p_line.c
@@ -45,6 +45,6 @@ void
if (p_lcom(line, count, msh) < 0)
{
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
}
diff --git a/src/u_vars.c b/src/u_vars.c
index 377da77..a852d6f 100644
--- a/src/u_vars.c
+++ b/src/u_vars.c
@@ -30,7 +30,7 @@ static char
{
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
ft_memcpy((char*)rvarname, (const char*)varname + 1,
ft_strlen(varname + 1));
@@ -51,7 +51,7 @@ static char
ft_memdel((void*)&rvarname);
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
ft_memdel((void*)&rvarname);
return (varval);
@@ -95,7 +95,7 @@ static char
{
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
return (varval);
}
@@ -105,7 +105,7 @@ static char
{
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
return (varval);
}
@@ -131,7 +131,7 @@ static char
{
lcom_clear(&msh->curr);
s_destroy(msh);
- fail_alloc(msh);
+ f_fail_alloc(msh);
}
return (varval);
}