mirror of
https://github.com/zoriya/ash.git
synced 2025-12-06 06:36:17 +00:00
error handling
This commit is contained in:
@@ -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);
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user