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)
{