error handling

This commit is contained in:
Louis
2020-05-24 21:51:25 +02:00
parent 9c13c27767
commit 23fd525874
2 changed files with 33 additions and 14 deletions

View File

@@ -62,6 +62,6 @@ void remove_alias(char *alias, alias_t **list);
int print_char(char *str, int i);
//if
char *get_expr(char **argv);
int get_test_return_value(char **argv, env_t *env);
int get_max_cmd_len(char **argv);

View File

@@ -11,6 +11,25 @@
#include "shell.h"
#include "builtin.h"
int matched_parenthesis(char **argv)
{
int left_p = 0;
int right_p = 0;
for (int i = 0; argv[i]; i++)
for (int j = 0; argv[i][j]; j++) {
left_p = argv[i][j] == '(' ? left_p + 1 : left_p;
right_p = argv[i][j] == ')' ? right_p + 1 : right_p;
}
if (left_p > right_p)
printf("Too many ('s.\n");
if (right_p > left_p)
printf("Too many )'s.\n");
if (left_p == right_p)
return (1);
return (0);
}
int get_max_cmd_len(char **argv)
{
int len = 0;
@@ -48,30 +67,30 @@ int execute_one_liner(char **argv, env_t *env)
return (0);
}
int is_valid_expression(char **argv)
int is_valid_if_cmd(char **argv)
{
int len = 0;
for (; argv[len]; len++);
if (len < 1)
if (len < 1) {
printf("if: Too few arguments\n");
return (0);
if (argv[1][0] != '(')
}
if (!matched_parenthesis(argv))
return (0);
for (int i = 1; argv[i]; i++)
for (int j = 0; argv[i][j]; j++)
if (argv[i][j] == ')')
return (1);
return (0);
if (argv[1][0] != '(') {
printf("if: Expression Syntax.\n");
return (0);
}
return (1);
}
int builtin_if(char **argv, env_t *env)
{
if (is_valid_expression(argv)) {
if (is_valid_if_cmd(argv)) {
execute_one_liner(argv, env);
} else {
printf("if: Expression Syntax.\n");
fflush(stdout);
env->vars = my_setenv(env->vars, "?", "0");
} else
env->vars = my_setenv(env->vars, "?", "1");
}
return (0);
}