[comp.sources.d] System V sh job-control patches

simon@its63b.ed.ac.uk (Simon Brown) (07/26/87)

Here's a patch for the System V shell job-control diffs that were posted
in comp.sources.unix a few weeks ago.

To install the patches, unshar this archive, then patch from "Patch1".
There are two bugs fixed:
   1. The "io.c" patch fixes the bug that causes the shell to hang if you
      try to do any input from your ".profile" (such as a `read' command).

   2. The "proc.c" patch fixes up a typo that probably doesn't make any
      real difference really, but it's probably better to have it mended...

Oh yes, there's a "patchversion.h" file too, so's you'll know what patches
you've stuck in.

	%{
	    Simon!
	%}

----------------- cut here and unshar -------------------------
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	Patch1
#	patchversion.h
# This archive created: Sun Jun 28 15:33:45 1987
# By:	Simon Brown (Computer Science Department, Edinburgh University)
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'Patch1'" '(2449 characters)'
if test -f 'Patch1'
then
	echo shar: "will not over-write existing file 'Patch1'"
else
cat << \SHAR_EOF > 'Patch1'
PATCH FOR "io.c":

*** io.c	Sat Jun 27 18:30:46 1987
--- ../io.c	Mon Mar 30 17:38:53 1987
***************
*** 347,352
  #define CONSTTYIO 14
  
  /* this is a bit naughty: still... its only declared for sgtty, not termio! */
  #define TIOCEXCL (('t'<<8)|13)
  
  static char sxt[] = "/dev/sxt/000";

--- 347,353 -----
  #define CONSTTYIO 14
  
  /* this is a bit naughty: still... its only declared for sgtty, not termio! */
+ #ifndef TIOCEXCL
  #define TIOCEXCL (('t'<<8)|13)
  #endif
  
***************
*** 348,353
  
  /* this is a bit naughty: still... its only declared for sgtty, not termio! */
  #define TIOCEXCL (('t'<<8)|13)
  
  static char sxt[] = "/dev/sxt/000";
  static char no_jobs[] = "; thus no job-control\n";

--- 349,355 -----
  /* this is a bit naughty: still... its only declared for sgtty, not termio! */
  #ifndef TIOCEXCL
  #define TIOCEXCL (('t'<<8)|13)
+ #endif
  
  static char sxt[] = "/dev/sxt/000";
  static char no_jobs[] = "; thus no job-control\n";
***************
*** 464,471
  	}
  	close(0);
  	close(1); close(2);		/* forget real tty */
! 	dup(fd);			/* input is channel 0 or 1 */
! 	dup(0); dup(0);			/* stdout/stderr channel 0 or 1 too*/
  	close(fd);
  	iflags |= jobflg;
  	return;

--- 466,473 -----
  	}
  	close(0);
  	close(1); close(2);		/* forget real tty */
! 	dup(fd);			/* input is channel 1 */
! 	dup(0); dup(0);			/* stdout/stderr channel 1 too*/
  	close(fd);
  	ioctl(sxt_fd,SXTIOCSWTCH,1);	/* switch to channel 1 */
  	iflags |= jobflg;
***************
*** 467,472
  	dup(fd);			/* input is channel 0 or 1 */
  	dup(0); dup(0);			/* stdout/stderr channel 0 or 1 too*/
  	close(fd);
  	iflags |= jobflg;
  	return;
  

--- 469,475 -----
  	dup(fd);			/* input is channel 1 */
  	dup(0); dup(0);			/* stdout/stderr channel 1 too*/
  	close(fd);
+ 	ioctl(sxt_fd,SXTIOCSWTCH,1);	/* switch to channel 1 */
  	iflags |= jobflg;
  	return;
  

PATCH FOR "proc.c":

*** proc.c	Sat Jun 27 18:24:56 1987
--- ../proc.c	Sun Jun 28 15:26:10 1987
***************
*** 245,251
  				continue;
  			iflags |= sxtwaiting;
  			oldex = extracnt;
! 			while (ioctl(sxt_fd,SXTIOCWF,0) == -1)
  			iflags &= ~sxtwaiting;
  			setsxt(currentjob);
  			if (jobs[currentjob]->jb_sxtfg!=(-1))

--- 245,251 -----
  				continue;
  			iflags |= sxtwaiting;
  			oldex = extracnt;
! 			while (ioctl(sxt_fd,SXTIOCWF,0) == -1);
  			iflags &= ~sxtwaiting;
  			setsxt(currentjob);
  			if (jobs[currentjob]->jb_sxtfg!=(-1))
SHAR_EOF
fi
echo shar: "extracting 'patchversion.h'" '(23 characters)'
if test -f 'patchversion.h'
then
	echo shar: "will not over-write existing file 'patchversion.h'"
else
cat << \SHAR_EOF > 'patchversion.h'
#define PATCHVERSION 1
SHAR_EOF
fi
exit 0
#	End of shell archive
-- 
----------------------------------
| Simon Brown                    | UUCP:  seismo!mcvax!ukc!its63b!simon
| Department of Computer Science | JANET: simon@uk.ac.ed.its63b
| University of Edinburgh,       | ARPA:  simon%its63b.ed.ac.uk@cs.ucl.ac.uk
| Scotland, UK.                  |
----------------------------------     "Life's like that, you know"