diff --git a/src/builtin/builtin_manager.c b/src/builtin/builtin_manager.c index 801284d..7ec053f 100644 --- a/src/builtin/builtin_manager.c +++ b/src/builtin/builtin_manager.c @@ -8,11 +8,13 @@ #include "shell.h" #include "builtin.h" #include "redirections.h" - #include #include #include #include +#include +#include +#include int run_builtin(const builtin *cmd, char **a, redirection *inout[2], env_t *env) { @@ -63,9 +65,30 @@ int builtin_cd(char **argv, env_t *env) return (0); } +bool my_strisnum(char *str) +{ + for (int i = 0; str[i]; i++) { + if (!isdigit(str[i])) + return (false); + } + return (true); +} + int builtin_exit(char **argv, env_t *env) { - if (argv[1]) - env->vars = my_setenv(env->vars, "?", "1"); + char *ptr = argv[1]; + + if (!ptr) { + env->vars = my_setenv(env->vars, "?", "0"); + return (-1); + } + if (argv[1][0] == '-') { + ptr = &ptr[1]; + } + if (!my_strisnum(ptr)) { + dprintf(2, "exit: Expression Syntax.\n"); + return (0); + } + env->vars = my_setenv(env->vars, "?", argv[1]); return (-1); -} +} \ No newline at end of file