aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/minishell.h16
-rw-r--r--src/builtin/builtin.c16
-rw-r--r--src/eval/cmd.c6
-rw-r--r--src/main.c15
4 files changed, 33 insertions, 20 deletions
diff --git a/include/minishell.h b/include/minishell.h
index 9405109..67c2266 100644
--- a/include/minishell.h
+++ b/include/minishell.h
@@ -6,7 +6,7 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/26 15:33:51 by cacharle #+# #+# */
-/* Updated: 2020/07/14 09:35:14 by charles ### ########.fr */
+/* Updated: 2020/07/14 11:06:50 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -48,6 +48,7 @@ typedef t_ftht* t_path;
typedef t_ftvec* t_env;
extern int g_last_status_code;
+extern char *g_basename;
/*
** path.c
@@ -85,7 +86,6 @@ typedef struct
{
char *name;
t_builtin_func func;
- bool child_process;
} t_builtin_entry;
t_builtin_entry *builtin_search_func(char *name);
@@ -118,14 +118,20 @@ enum e_error
ERROR_CMD_FOUND_ERROR,
};
+/*
+** \brief Error specification
+** \param id Error type
+** \param status Status code returned
+** \param msg Error message to print, if is NULL, use strerror as a msg
+*/
+
typedef struct
{
enum e_error id;
int status;
- char *msg; // if NULL call strerror
- // char basename;
+ char *msg;
} t_error;
-void error_eval_put(enum e_error id, char *unexpected);
+void error_eval_put(enum e_error id, char *content);
#endif
diff --git a/src/builtin/builtin.c b/src/builtin/builtin.c
index 80b263e..9c5fe9e 100644
--- a/src/builtin/builtin.c
+++ b/src/builtin/builtin.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:11:01 by charles #+# #+# */
-/* Updated: 2020/06/23 08:35:15 by charles ### ########.fr */
+/* Updated: 2020/07/14 11:06:37 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -22,13 +22,13 @@
*/
static t_builtin_entry g_builtin_lookup[] = {
- {"echo", builtin_echo, true},
- {"cd", builtin_cd, false},
- {"pwd", builtin_pwd, true},
- {"export", builtin_export, false},
- {"unset", builtin_unset, false},
- {"env", builtin_env, true},
- {"exit", builtin_exit, false},
+ {"echo", builtin_echo},
+ {"cd", builtin_cd},
+ {"pwd", builtin_pwd},
+ {"export", builtin_export},
+ {"unset", builtin_unset},
+ {"env", builtin_env},
+ {"exit", builtin_exit},
};
t_builtin_entry *builtin_search_func(char *name)
diff --git a/src/eval/cmd.c b/src/eval/cmd.c
index e79cb88..b3cdc15 100644
--- a/src/eval/cmd.c
+++ b/src/eval/cmd.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/14 10:41:31 by charles #+# #+# */
-/* Updated: 2020/07/13 11:03:09 by charles ### ########.fr */
+/* Updated: 2020/07/14 11:07:00 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -92,8 +92,8 @@ int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast)
return (-1); // return error status
}
}
- else if (!param.builtin->child_process)
- return (param.builtin->func(argv, env));
+ /* else if (!param.builtin->child_process) // solved with pipeline */
+ /* return (param.builtin->func(argv, env)); */
param.argv = argv;
param.env = env;
diff --git a/src/main.c b/src/main.c
index ee98e1a..8b6667c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -6,7 +6,7 @@
/* By: cacharle <cacharle@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/28 11:45:44 by cacharle #+# #+# */
-/* Updated: 2020/07/14 10:03:35 by charles ### ########.fr */
+/* Updated: 2020/07/14 11:34:18 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -62,7 +62,6 @@ void signal_sigterm(int signum)
(void)signum;
}
-
/*
** TODO
** $?
@@ -70,10 +69,13 @@ void signal_sigterm(int signum)
** signal
** pipeline
** cmd are path
+** cmd variable
** interpolation order
-** PATH with no permission
+** PATH with no permission, link and other file system fun stuff
*/
+char *g_basename = "minishell";
+
int main(int argc, char **argv, char **envp)
{
t_path path;
@@ -81,12 +83,17 @@ int main(int argc, char **argv, char **envp)
env = env_from_array(envp);
path = path_update(NULL, env_search(env, "PATH"));
- /* printf("%s\n", argv[2]); */
signal(SIGINT, signal_sigint);
signal(SIGQUIT, signal_sigquit);
signal(SIGTERM, signal_sigterm);
+ char *last_slash = ft_strrchr(argv[0], '/');
+ if (last_slash == NULL)
+ g_basename = argv[0];
+ else
+ g_basename = last_slash + 1;
+
if (argc == 3 && ft_strcmp(argv[1], "-l") == 0)
{
t_ftlst *lex_out = lexer(ft_strdup(argv[2]));