jjc@UUNET.UU.NET (James Clark) (07/10/89)
Here are some patches to make bash 1.02 work on 386/ix (SVR3.2). The significant problems were: -- it dumps core on EOF; this happens on a Sun 4/SunOS 4 as well -- when a child process that catches interrupts gets an interrupt, bash also gets an interrupt and does a throw_to_top_level() with the result that the child process and bash end up reading simultaneously from the terminal. There were also a couple of minor glitches in the Makefiles: System V make doesn't understand `%' in rules, and there's no ranlib. James Clark jjc@jclark.uucp diff -rc bash-1.02/general.h bash/general.h *** bash-1.02/general.h Thu Jun 29 13:43:24 1989 --- bash/general.h Mon Jul 10 07:19:20 1989 *************** *** 39,45 **** #endif /* The output of `signal' is different on different systems. Yechh. */ ! #if defined(SUNOS4) || defined (NeXT) #define sighandler void #else #define sighandler int --- 39,45 ---- #endif /* The output of `signal' is different on different systems. Yechh. */ ! #if defined(SUNOS4) || defined (NeXT) || defined (i386) #define sighandler void #else #define sighandler int diff -rc bash-1.02/lib/readline.c bash/lib/readline.c *** bash-1.02/lib/readline.c Thu Jul 6 13:36:14 1989 --- bash/lib/readline.c Sun Jul 9 19:22:01 1989 *************** *** 59,65 **** #include <pwd.h> #ifdef SYSV ! struct pwd *getpwuid (), *getpwent (); #endif #define HACK_TERMCAP_MOTION --- 59,65 ---- #include <pwd.h> #ifdef SYSV ! struct passwd *getpwuid (), *getpwent (); #endif #define HACK_TERMCAP_MOTION diff -rc bash-1.02/lib/readline.h bash/lib/readline.h *** bash-1.02/lib/readline.h Thu Jun 29 16:07:03 1989 --- bash/lib/readline.h Sun Jul 9 19:43:34 1989 *************** *** 138,144 **** /* Pointer to the generator function for completion_matches (). NULL means to use filename_entry_function (), the default filename completer. */ ! Function *rl_completion_entry_function; /* Pointer to alternative function to create matches. Function is called with TEXT, START, and END. --- 138,144 ---- /* Pointer to the generator function for completion_matches (). NULL means to use filename_entry_function (), the default filename completer. */ ! extern Function *rl_completion_entry_function; /* Pointer to alternative function to create matches. Function is called with TEXT, START, and END. *************** *** 147,153 **** If this function exists and returns NULL then call the value of rl_completion_entry_function to try to match, otherwise use the array of strings returned. */ ! Function *rl_attempted_completion_function; /* **************************************************************** */ --- 147,153 ---- If this function exists and returns NULL then call the value of rl_completion_entry_function to try to match, otherwise use the array of strings returned. */ ! extern Function *rl_attempted_completion_function; /* **************************************************************** */ diff -rc bash-1.02/nojobs.c bash/nojobs.c *** bash-1.02/nojobs.c Fri Jun 23 00:44:18 1989 --- bash/nojobs.c Mon Jul 10 07:14:30 1989 *************** *** 135,146 **** { int got_pid, return_val; union wait status; while ((got_pid = wait (&status)) != pid) { if (got_pid < 0 && errno != EINTR) programming_error ("got errno %d while waiting for %d", errno, pid); } ! /* Default return value. */ return_val = status.w_retcode & 0x7f; --- 135,153 ---- { int got_pid, return_val; union wait status; + SigHandler *old_int, *old_quit; + old_int = signal (SIGINT, SIG_IGN); + old_quit = signal (SIGQUIT, SIG_IGN); + while ((got_pid = wait (&status)) != pid) { if (got_pid < 0 && errno != EINTR) programming_error ("got errno %d while waiting for %d", errno, pid); } ! ! signal (SIGINT, old_int); ! signal (SIGQUIT, old_quit); ! /* Default return value. */ return_val = status.w_retcode & 0x7f; diff -rc bash-1.02/parse.y bash/parse.y *** bash-1.02/parse.y Sat Jul 1 21:42:28 1989 --- bash/parse.y Sun Jul 9 19:51:26 1989 *************** *** 430,435 **** --- 430,442 ---- current_readline_line = readline (current_readline_prompt); current_readline_line_index = 0; + + if (current_readline_line == (char *)EOF) + { + current_readline_line = NULL; + return EOF; + } + current_readline_line = (char *)xrealloc (current_readline_line, 2 + strlen (current_readline_line)); diff -rc bash-1.02/shell.c bash/shell.c *** bash-1.02/shell.c Sat Jul 1 14:33:04 1989 --- bash/shell.c Mon Jul 10 04:11:03 1989 *************** *** 301,307 **** else { interactive = 0; ! #ifndef JOB_CONTROL job_control = 0; #endif } --- 301,307 ---- else { interactive = 0; ! #ifndef NOJOBS job_control = 0; #endif } diff -rc bash-1.02/variables.c bash/variables.c *** bash-1.02/variables.c Tue Jun 27 16:40:42 1989 --- bash/variables.c Sun Jul 9 19:19:25 1989 *************** *** 27,33 **** #include "version.h" #ifdef SYSV ! struct pwd *getpwuid (), *getpwent (); #endif /* The list of shell variables that the user has created, or that came from --- 27,33 ---- #include "version.h" #ifdef SYSV ! struct passwd *getpwuid (), *getpwent (); #endif /* The list of shell variables that the user has created, or that came from