diff --git a/src/builtin/builtin_manager.c b/src/builtin/builtin_manager.c index 542be28..a02c035 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/src/parser/parser.c b/src/parser/parser.c index 75f6d1e..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) { @@ -42,6 +43,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 +51,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 +69,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); 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=""