aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-07-19 19:27:52 +0200
committerCharles <sircharlesaze@gmail.com>2020-07-19 19:27:52 +0200
commit6e456095fce214a2eadea0cafa3fa7ea1113b4e6 (patch)
tree42d255dc5042f1df8079567e7ca3426d22cba24d /src
parenta478d95bed0f24f9783714600af48a6c1cde2aae (diff)
downloadminishell-6e456095fce214a2eadea0cafa3fa7ea1113b4e6.tar.gz
minishell-6e456095fce214a2eadea0cafa3fa7ea1113b4e6.tar.bz2
minishell-6e456095fce214a2eadea0cafa3fa7ea1113b4e6.zip
Added errof for cleaner error message, Removed previous error functions
Diffstat (limited to 'src')
-rw-r--r--src/builtin/cd.c14
-rw-r--r--src/builtin/exit.c10
-rw-r--r--src/builtin/export.c5
-rw-r--r--src/builtin/unset.c4
-rw-r--r--src/error.c73
-rw-r--r--src/eval/cmd.c16
-rw-r--r--src/eval/redir.c4
-rw-r--r--src/parse/parse.c41
-rw-r--r--src/preprocess.c4
9 files changed, 59 insertions, 112 deletions
diff --git a/src/builtin/cd.c b/src/builtin/cd.c
index 2377ce7..d7115e5 100644
--- a/src/builtin/cd.c
+++ b/src/builtin/cd.c
@@ -6,7 +6,7 @@
/* By: charles <charles@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:10:20 by charles #+# #+# */
-/* Updated: 2020/07/19 15:55:08 by charles ### ########.fr */
+/* Updated: 2020/07/19 19:05:25 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -25,8 +25,7 @@ int builtin_cd(char **argv, t_env env)
(void)env;
if (argv[1] != NULL && argv[2] != NULL)
{
- ft_putstr_fd(g_basename, STDERR_FILENO);
- ft_putendl_fd(": cd: too many arguments", STDERR_FILENO);
+ errorf("cd: too many arguments\n");
return (1);
}
if (argv[1] != NULL && argv[1][0] == '\0')
@@ -35,8 +34,7 @@ int builtin_cd(char **argv, t_env env)
{
if ((home = env_search(env, "HOME")) == NULL)
{
- ft_putstr_fd(g_basename, STDERR_FILENO);
- ft_putendl_fd(": cd: HOME not set", STDERR_FILENO);
+ errorf("cd: HOME not set\n");
return (1);
}
argv[1] = home;
@@ -44,11 +42,7 @@ int builtin_cd(char **argv, t_env env)
errno = 0;
if (chdir(argv[1]) == -1)
{
- ft_putstr_fd(g_basename, STDERR_FILENO);
- ft_putstr_fd(": cd: ", STDERR_FILENO);
- ft_putstr_fd(argv[1], STDERR_FILENO);
- ft_putstr_fd(": ", STDERR_FILENO);
- ft_putendl_fd(strerror(errno), STDERR_FILENO);
+ errorf("cd: %s: %s\n", argv[1], strerror(errno));
return (1);
}
if (!(getcwd(buf, PATH_MAX)))
diff --git a/src/builtin/exit.c b/src/builtin/exit.c
index 860325e..3f1d843 100644
--- a/src/builtin/exit.c
+++ b/src/builtin/exit.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:10:16 by charles #+# #+# */
-/* Updated: 2020/07/17 16:36:03 by charles ### ########.fr */
+/* Updated: 2020/07/19 19:12:46 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -33,16 +33,12 @@ int builtin_exit(char **argv, t_env env)
after++;
if (*after != '\0' || errno == ERANGE)
{
- // replace with minishell error system
- ft_putstr_fd("minishell: exit: ", STDERR_FILENO);
- ft_putstr_fd(argv[1], STDERR_FILENO);
- ft_putstr_fd(": numeric argument required\n", STDERR_FILENO);
+ errorf("exit: %s: numeric argument required\n", argv[1]);
return 2;
}
if (argv[2] != NULL)
{
- // replace with minishell error system
- ft_putendl_fd("minishell: exit: too many arguments", STDERR_FILENO);
+ errorf("exit: too many arguments\n");
return 1;
}
}
diff --git a/src/builtin/export.c b/src/builtin/export.c
index 809b809..6fbb88f 100644
--- a/src/builtin/export.c
+++ b/src/builtin/export.c
@@ -6,7 +6,7 @@
/* By: charles <charles@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:11:34 by charles #+# #+# */
-/* Updated: 2020/07/15 13:22:18 by charles ### ########.fr */
+/* Updated: 2020/07/19 18:46:48 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -21,6 +21,7 @@ static void st_put_declare_x(char *s)
{
char *equal_ptr;
+ // could use errorf on stdout
if (s == NULL)
return ;
ft_putstr("declare -x ");
@@ -57,7 +58,7 @@ int builtin_export(char **argv, t_env env)
{
if (!skip)
*equal_ptr = '=';
- error_put_invalid_identifier("export", argv[i]);
+ errorf("export: `%s': not a valid identifier\n", argv[i]);
status = 1;
continue;
}
diff --git a/src/builtin/unset.c b/src/builtin/unset.c
index b7b6d58..367f063 100644
--- a/src/builtin/unset.c
+++ b/src/builtin/unset.c
@@ -6,7 +6,7 @@
/* By: charles <charles@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/01 17:10:51 by charles #+# #+# */
-/* Updated: 2020/07/15 13:14:38 by charles ### ########.fr */
+/* Updated: 2020/07/19 18:47:36 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -29,7 +29,7 @@ int builtin_unset(char **argv, t_env env)
{
if (!utils_valid_identifier(argv[i]))
{
- error_put_invalid_identifier("unset", argv[i]);
+ errorf("unset: `%s': not a valid identifier\n", argv[i]);
status = 1;
continue; // put invalid identifier
}
diff --git a/src/error.c b/src/error.c
index fe5b4b1..0d2095e 100644
--- a/src/error.c
+++ b/src/error.c
@@ -6,61 +6,40 @@
/* By: charles <charles@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/14 11:02:52 by charles #+# #+# */
-/* Updated: 2020/07/19 15:34:20 by charles ### ########.fr */
+/* Updated: 2020/07/19 19:20:38 by charles ### ########.fr */
/* */
/* ************************************************************************** */
#include "eval.h"
-static t_error g_errors[] =
-{
- {ERROR_AMBIGUOUS_REDIR, 1, "ambiguous redirect"},
- {ERROR_OPEN, 1, NULL},
- {ERROR_CMD_NOT_FOUND, 127, "command not found"},
-};
-
-t_error *st_error_get(enum e_error id)
-{
- size_t i;
- t_error *match;
-
- match = NULL;
- i = 0;
- while (i < sizeof(g_errors) / sizeof(t_error))
- {
- if (g_errors[i].id == id)
- match = &g_errors[i];
- i++;
- }
- return (match);
-}
-
-void error_eval_put(enum e_error id, char *unexpected)
-{
- t_error *err;
+/*
+** \brief printf like function that only works with `%s`,
+** prefix the message with the program name
+** and output on STDERR
+** \note NULL arguments are ignored
+*/
- err = st_error_get(id);
- ft_putstr_fd(g_basename, STDERR_FILENO);
- ft_putstr_fd(": ", STDERR_FILENO);
- ft_putstr_fd(unexpected, STDERR_FILENO);
- ft_putstr_fd(": ", STDERR_FILENO);
- if (err->msg == NULL)
- ft_putendl_fd(strerror(errno), STDERR_FILENO);
- else
- ft_putendl_fd(err->msg, STDERR_FILENO);
-}
-
-int error_status(enum e_error id)
+void errorf(const char *format, ...)
{
- return (st_error_get(id)->status);
-}
+ va_list ap;
+ char *arg;
-void error_put_invalid_identifier(char *prefix, char *identifier)
-{
+ va_start(ap, format);
ft_putstr_fd(g_basename, STDERR_FILENO);
ft_putstr_fd(": ", STDERR_FILENO);
- ft_putstr_fd(prefix, STDERR_FILENO);
- ft_putstr_fd(": `", STDERR_FILENO);
- ft_putstr_fd(identifier, STDERR_FILENO);
- ft_putstr_fd("': not a valid identifier\n", STDERR_FILENO);
+ while (*format != '\0')
+ {
+ if (format[0] == '%' && format[1] == 's')
+ {
+ arg = va_arg(ap, char*);
+ ft_putstr_fd(arg, STDERR_FILENO);
+ format += 2;
+ }
+ else
+ {
+ ft_putchar_fd(*format, STDERR_FILENO);
+ format++;
+ }
+ }
+ va_end(ap);
}
diff --git a/src/eval/cmd.c b/src/eval/cmd.c
index a7a6f71..87c9bbf 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/19 16:53:54 by charles ### ########.fr */
+/* Updated: 2020/07/19 19:00:54 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -74,19 +74,12 @@ int forked_cmd(void *void_param)
struct stat statbuf;
if (stat(param->exec_path, &statbuf) != -1 && S_ISDIR(statbuf.st_mode))
{
- ft_putstr_fd(g_basename, STDERR_FILENO);
- ft_putstr_fd(": ", STDERR_FILENO);
- ft_putstr_fd(param->exec_path, STDERR_FILENO);
- ft_putendl_fd(": Is a directory", STDERR_FILENO);
+ errorf("%s: Is a directory\n", param->exec_path);
ret = 126;
}
else
{
- ft_putstr_fd(g_basename, STDERR_FILENO);
- ft_putstr_fd(": ", STDERR_FILENO);
- ft_putstr_fd(param->exec_path, STDERR_FILENO);
- ft_putstr_fd(": ", STDERR_FILENO);
- ft_putendl_fd(strerror(errno), STDERR_FILENO);
+ errorf("%s: %s\n", param->exec_path, strerror(errno));
ret = 126;
}
}
@@ -121,7 +114,6 @@ int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast)
ft_vecpop(param.env_local, NULL);
if (ft_vecswallow_at(env, env->size - 1, param.env_local) == NULL)
{
- /* printf("hyo\n"); */
ft_vecdestroy(param.env_local, free);
return (-1);
}
@@ -146,7 +138,7 @@ int eval_cmd(int fds[2], t_env env, t_path path, t_ast *ast)
if (param.exec_path == NULL)
{
g_last_status_code = 127;
- error_eval_put(ERROR_CMD_NOT_FOUND, argv[0]);
+ errorf("%s: command not found\n", argv[0]);
ft_split_destroy(argv);
return (-1); // return error status
}
diff --git a/src/eval/redir.c b/src/eval/redir.c
index 7249ad5..49cfa1d 100644
--- a/src/eval/redir.c
+++ b/src/eval/redir.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/15 11:05:34 by charles #+# #+# */
-/* Updated: 2020/06/17 16:17:43 by charles ### ########.fr */
+/* Updated: 2020/07/19 18:57:03 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -27,7 +27,7 @@ static bool st_open_replace(int *fd, char *filename, int oflag)
*fd = open(filename, oflag);
if (*fd == -1)
{
- error_eval_put(ERROR_OPEN, filename);
+ errorf("%s: %s\n", filename, strerror(errno));
free(filename);
return (false);
}
diff --git a/src/parse/parse.c b/src/parse/parse.c
index 6922530..89102bc 100644
--- a/src/parse/parse.c
+++ b/src/parse/parse.c
@@ -6,7 +6,7 @@
/* By: nahaddac <nahaddac@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/06/17 18:09:04 by nahaddac #+# #+# */
-/* Updated: 2020/07/17 16:12:53 by nahaddac ### ########.fr */
+/* Updated: 2020/07/19 19:25:29 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -44,7 +44,6 @@ t_ret *parse_redir(t_ftlst *input, t_ftlst **redirs)
{
enum e_token_tag tag;
t_ret *tmp;
- char *error;
push_token(redirs, input->data);
input = input->next;
@@ -60,9 +59,7 @@ t_ret *parse_redir(t_ftlst *input, t_ftlst **redirs)
}
if (!(tag & TAG_IS_STR))
{
- error = ft_strjoin3(g_basename,": syntax error unexpected token `", ((t_token *)input->data)->content);
- error = ft_strjoin(error, "\'\n");
- ft_putstr_fd(error, 2);
+ errorf("syntax error near unexpected token `%s'\n", ((t_token *)input->data)->content);
tmp = ret_wrap_ast(NULL, NULL);
tmp->syntax_error = true;
return tmp;
@@ -75,15 +72,12 @@ t_ret *parse_cmd(t_ftlst *input)
{
enum e_token_tag tag;
t_ast *ast;
- char *error;
t_ret *tmp;
tag = ((t_token *)input->data)->tag;
if (tag & TAG_IS_SEP)
{
- error = ft_strjoin3(g_basename,": syntax error unexpected token `", ((t_token *)input->data)->content);
- error = ft_strjoin(error, "\'\n");
- ft_putstr_fd(error, 2);
+ errorf("syntax error near unexpected token `%s'\n", ((t_token *)input->data)->content);
tmp = ret_wrap_ast(NULL, NULL);
tmp->syntax_error = true;
return tmp;
@@ -121,7 +115,6 @@ t_ret *parse_op(t_ftlst *input)
t_ret *right_ret;
enum e_token_tag tag;
t_ret *tmp;
- char *error;
left_ret = parse_expr(input);
if (left_ret == NULL || left_ret->syntax_error)
@@ -133,19 +126,15 @@ t_ret *parse_op(t_ftlst *input)
tag = ((t_token*)input->data)->tag;
if (!(tag & TAG_IS_SEP))
{
- error = ft_strjoin3(g_basename,": syntax error near unexpected token `", ((t_token *)input->data)->content);
- error = ft_strjoin(error, "\'\n");
- ft_putstr_fd(error, 2);
+ errorf("syntax error near unexpected token `%s'\n", ((t_token *)input->data)->content);
tmp = ret_wrap_ast(NULL, NULL);
tmp->syntax_error = true;
return tmp;
}
input = input->next;
- if(input == NULL)
+ if (input == NULL)
{
- error = ft_strjoin(g_basename,": syntax error expected token ");
- error = ft_strjoin(error, "\n");
- ft_putstr_fd(error, 2);
+ errorf("syntax error expected token\n");
tmp = ret_wrap_ast(NULL, NULL);
tmp->syntax_error = true;
return tmp;
@@ -165,7 +154,6 @@ t_ret *parse_expr(t_ftlst *input)
t_ret *tmp;
enum e_token_tag tag;
t_ast *new_ast;
- char *error;
tag = ((t_token*)input->data)->tag;
if (tag & TAG_PARENT_OPEN)
@@ -175,24 +163,21 @@ t_ret *parse_expr(t_ftlst *input)
input = tmp->rest;
if (input == NULL)
{
- error = ft_strjoin(g_basename,": syntax error expected token");
- ft_putstr_fd(error, 2);
+ errorf("syntax error expected token\n");
tmp->syntax_error = true;
return (tmp);
}
tag = ((t_token*)input->data)->tag;
- if (!(tag & TAG_PARENT_CLOSE) )
+ if (!(tag & TAG_PARENT_CLOSE))
{
- error = ft_strjoin(g_basename,": syntax error expected token `)''");
- ft_putstr_fd(error, 2);
- tmp->syntax_error = TRUE;
+ errorf("syntax error expected token `)'\n");
+ tmp->syntax_error = true;
return (tmp);
}
// if (tag & TAG_IS_SEP)
// {
- // error = ft_strjoin(g_basename,": syntax error expected token `)''");
- // ft_putstr_fd(error, 2);
- // tmp->syntax_error = TRUE;
+ // errorf("syntax error expected token `)'\n");
+ // tmp->syntax_error = true;
// return (tmp);
// }
input = input->next;
@@ -239,7 +224,7 @@ t_ret *parse(t_ftlst *input)
ret->rest = NULL;
ret->syntax_error = false;
// ret = error_syntax_simple(input, ret);
- // if (ret->syntax_error == TRUE)
+ // if (ret->syntax_error == true)
// return ret;
ret = parse_op(input);
return (ret);
diff --git a/src/preprocess.c b/src/preprocess.c
index f7e4538..2a884df 100644
--- a/src/preprocess.c
+++ b/src/preprocess.c
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/03 08:58:49 by charles #+# #+# */
-/* Updated: 2020/07/19 17:00:16 by charles ### ########.fr */
+/* Updated: 2020/07/19 19:01:53 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -189,7 +189,7 @@ char *preprocess_filename(t_ftlst **tokens, t_env env)
if (strs[1] != NULL)
{
/* save tokens */
- error_eval_put(ERROR_AMBIGUOUS_REDIR, strs[1]);
+ errorf("%s: ambiguous redidrect\n", strs[1]);
ft_split_destroy(strs);
return (NULL);
}