From fdc18469fd156198ba16884f80203b48e77eacae Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sun, 24 May 2020 22:32:20 +0200 Subject: [PATCH 1/3] Making cd exit on errors when no window is here --- src/builtin/builtin_manager.c | 5 +++-- tests/tester/tests | 10 ---------- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/src/builtin/builtin_manager.c b/src/builtin/builtin_manager.c index 7ec053f..98bc8e3 100644 --- a/src/builtin/builtin_manager.c +++ b/src/builtin/builtin_manager.c @@ -47,9 +47,9 @@ int builtin_cd(char **argv, env_t *env) char *old = getcwd(NULL, 0); if (get_argc(argv) > 2) { - write(2, "cd: Too many arguments.\n", 25); + dprintf(2, "cd: Too many arguments.\n"); env->vars = my_setenv(env->vars, "?", "1"); - return (0); + return (-1 * !env->window); } env->vars = my_setenv(env->vars, "?", "0"); if (!argv[1]) @@ -59,6 +59,7 @@ int builtin_cd(char **argv, env_t *env) if (chdir(path) < 0) { printf("%s: %s.\n", path, strerror(errno)); env->vars = my_setenv(env->vars, "?", "1"); + return (-1 * !env->window); } else env->env = my_setenv(env->env, "OLDPWD", old); free(old); diff --git a/tests/tester/tests b/tests/tester/tests index d7f5d86..bda695b 100644 --- a/tests/tester/tests +++ b/tests/tester/tests @@ -289,16 +289,6 @@ TESTS= echo 'echo "$"' [928-END] -[929] -NAME="929" -SETUP="" -CLEAN="" -TESTS= - echo 'echo "\t"' - echo 'echo $' - echo 'echo $?' -[929-END] - [930] NAME="930" SETUP="" From 7b542598af20d2ca853a0542307dcb13773f5769 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sun, 24 May 2020 22:51:49 +0200 Subject: [PATCH 2/3] Cleaning the parser --- src/parser/parser.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/parser/parser.c b/src/parser/parser.c index 75f6d1e..10bd6ad 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -42,6 +42,7 @@ char **remove_leading_entries(char **cmds) char *process_aliases(char *cmd, env_t *env) { int bin_len; + int len; for (bin_len = 0; cmd[bin_len]; bin_len++) { if (cmd[bin_len] == ' ' || cmd[bin_len] == '\t') @@ -49,10 +50,11 @@ char *process_aliases(char *cmd, env_t *env) } for (alias_t *al = env->alias; al; al = al->next) { if (!strncmp(al->alias, cmd, bin_len)) { - cmd = realloc(cmd, strlen(cmd) + strlen(al->command) + 1 - bin_len); + len = strlen(cmd) + strlen(al->command) + 1 - bin_len; + rm_n_char(cmd, bin_len); + cmd = realloc(cmd, len); if (!cmd) return (NULL); - rm_n_char(cmd, bin_len); insert_substring(cmd, al->command, 1); } } @@ -66,8 +68,17 @@ char **parse_input(char *cmd, env_t *env, wordexp_t *parser) if (!(cmd = process_vars(cmd, env))) return (NULL); cmd = process_aliases(cmd, env); - if (wordexp(cmd, parser, WRDE_SHOWERR)) { - perror(SHELL_NAME); + switch (wordexp(cmd, parser, WRDE_SHOWERR)) { + case 0: + break; + case WRDE_BADCHAR: + dprintf(2, "Illegal occurrence of one of |, &, ;, <, >, (, ), {, }.\n"); + return (NULL); + case WRDE_SYNTAX: + dprintf(2, "Shell syntax error\n"); + return (NULL); + default: + dprintf(2, "Unknonw parsing error.\n"); return (NULL); } free(cmd); From 03914a15bfe18b5e8a4a83716708fddfe04c30e3 Mon Sep 17 00:00:00 2001 From: Anonymus Raccoon Date: Sun, 24 May 2020 23:05:15 +0200 Subject: [PATCH 3/3] Adding dprintf. --- src/parser/parser.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/parser/parser.c b/src/parser/parser.c index 10bd6ad..6a1a6df 100644 --- a/src/parser/parser.c +++ b/src/parser/parser.c @@ -18,6 +18,7 @@ #include char *strdup(const char *); +int dprintf(int, const char *, ...); int count_trailing_spaces(char *cmd) {