aboutsummaryrefslogtreecommitdiff
path: root/src/builtin
diff options
context:
space:
mode:
Diffstat (limited to 'src/builtin')
-rw-r--r--src/builtin/builtin.c16
-rw-r--r--src/builtin/exit.c27
2 files changed, 24 insertions, 19 deletions
diff --git a/src/builtin/builtin.c b/src/builtin/builtin.c
index 9c5fe9e..08abcd8 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/07/14 11:06:37 by charles ### ########.fr */
+/* Updated: 2020/07/17 11:16:57 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -22,13 +22,13 @@
*/
static t_builtin_entry g_builtin_lookup[] = {
- {"echo", builtin_echo},
- {"cd", builtin_cd},
- {"pwd", builtin_pwd},
- {"export", builtin_export},
- {"unset", builtin_unset},
- {"env", builtin_env},
- {"exit", builtin_exit},
+ {"echo", builtin_echo, true},
+ {"cd", builtin_cd, false},
+ {"pwd", builtin_pwd, true},
+ {"export", builtin_export, false},
+ {"unset", builtin_unset, false},
+ {"env", builtin_env, false},
+ {"exit", builtin_exit, false},
};
t_builtin_entry *builtin_search_func(char *name)
diff --git a/src/builtin/exit.c b/src/builtin/exit.c
index 15271f6..860325e 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/13 15:35:44 by charles ### ########.fr */
+/* Updated: 2020/07/17 16:36:03 by charles ### ########.fr */
/* */
/* ************************************************************************** */
@@ -19,27 +19,32 @@
int builtin_exit(char **argv, t_env env)
{
- int status;
+ long status;
+ char *after;
(void)env;
if (argv[1] == NULL)
status = g_last_status_code;
- else if (argv[2] != NULL)
- {
- // replace with minishell error system
- ft_putendl_fd("minishell: exit: too many arguments", STDERR_FILENO);
- return 1;
- }
else
{
errno = 0;
- status = ft_atoi_strict(argv[1]);
- if (errno != 0)
+ status = ft_strtol(argv[1], &after, 10);
+ while (ft_isblank(*after))
+ after++;
+ if (*after != '\0' || errno == ERANGE)
{
// replace with minishell error system
- ft_putendl_fd("minishell: exit: ---argv[1]---: numeric argument required", STDERR_FILENO);
+ ft_putstr_fd("minishell: exit: ", STDERR_FILENO);
+ ft_putstr_fd(argv[1], STDERR_FILENO);
+ ft_putstr_fd(": numeric argument required\n", STDERR_FILENO);
return 2;
}
+ if (argv[2] != NULL)
+ {
+ // replace with minishell error system
+ ft_putendl_fd("minishell: exit: too many arguments", STDERR_FILENO);
+ return 1;
+ }
}
exit(status % 256);
return (0);