bash/bash-3.2-command_not_found.patch

50 lines
1.9 KiB
Diff
Raw Normal View History

diff -up bash-3.2/config-top.h.command_not_found bash-3.2/config-top.h
--- bash-3.2/config-top.h.command_not_found 2008-12-04 15:45:21.000000000 +0100
+++ bash-3.2/config-top.h 2008-12-04 15:45:55.000000000 +0100
@@ -87,3 +87,7 @@
/* Define this if you want bash to try to check whether it's being run by
sshd and source the .bashrc if so (like the rshd behavior). */
#define SSH_SOURCE_BASHRC
+
+/* Define this if you want bash to try to find command_not_found_handler
+ shell function */
+#define COMMAND_NOT_FOUND_HANDLER
diff -up bash-3.2/execute_cmd.c.command_not_found bash-3.2/execute_cmd.c
--- bash-3.2/execute_cmd.c.command_not_found 2008-12-04 15:34:48.000000000 +0100
+++ bash-3.2/execute_cmd.c 2008-12-04 15:34:52.000000000 +0100
@@ -3737,10 +3737,33 @@ execute_disk_command (words, redirects,
if (command == 0)
{
+#if defined (COMMAND_NOT_FOUND_HANDLER)
+ SHELL_VAR *f, *v;
+ WORD_LIST *cmdlist;
+ WORD_DESC *w;
+ int fval;
+ if ( (posixly_correct || interactive_shell == 0) ||
+ ( f = find_function ("command_not_found_handler")) == 0)
+ {
+ internal_error (_("%s: command not found"), pathname);
+ exit (EX_NOTFOUND); /* Posix.2 says the exit status is 127 */
+ }
+ w = make_word("command_not_found_handler");
+ cmdlist = make_word_list(w, (WORD_LIST*)NULL);
+
+ w = make_word(pathname);
+ cmdlist->next = make_word_list(w, (WORD_LIST*)NULL);
+
+ fval = execute_shell_function (f, cmdlist);
+ if (fval == EX_NOTFOUND)
+ internal_error (_("%s: command not found"), pathname);
+ exit(fval);
+ }
+#else
internal_error (_("%s: command not found"), pathname);
exit (EX_NOTFOUND); /* Posix.2 says the exit status is 127 */
}
-
+#endif
/* Execve expects the command name to be in args[0]. So we
leave it there, in the same format that the user used to
type it in. */