[comp.sources.bugs] perl 3.0 patch #28

tneff@bfmny0.BFM.COM (Tom Neff) (08/14/90)

A report from the V/386 trenches.  I have Perl PL28 working after some
manual intervention and minor annoyances.

System is AT&T System V/386 Release 3.2.1, with the standard 4.1
development system.

 * We don't HAVE an unexec() call, and the reference to it in eval.c is
not #ifdef'd in any way, nor does Configure check for it.  So the make
proceeds to bomb in 'ld' with an unresolved.  Configure should check its
library tables and set 'd_unexec' accordingly, to be translated into a
conditional '#ifdef UNEXEC' in eval.c.  ... This isn't actually new to
PL28 by the way, but my last temp hack in the Makefile was wiped out by
the patch run so I was reminded of the problem.  The workarounds are to
put a dummy unexec() into usersub.c or else add '-Dunexec=sync' into the
'cflags' variable in config.sh.

 * As someone pointed out, the perl.man files were silently changed to
perl_man, so the patch bombs.  Growl.

 * The make for 'h2ph' uses the same subdefinitions as 'a2p' and 'x2p',
including a reference to 'config.sh'.  But unlink a2p and x2p, it
doesn't have its own subdirectory.  So 'make' bombs trying to find
'../config.sh' from the main perl source directory.  I worked around it
for the moment by touching a dummy ../config.sh rather than slogging
through the makefile to fix the logic.

 * When Configure reuses your previous config.sh it keeps cflags and
cppflags, but not the 'define'/'undef' switches set above.  I have to
keep going in and changing d_castneg='undef' by hand, because the test C
program decides my C compiler casts negative floats to long correctly.
(Somehow, it doesn't.)

But, at least all tests do pass.  The optimizer blows up on eval.c but
it always has.

-- 
"Take off your engineering hat   = "The filter has      | Tom Neff
and put on your management hat." = discreting sources." | tneff@bfmny0.BFM.COM

lwall@jpl-devvax.JPL.NASA.GOV (Larry Wall) (08/14/90)

System: perl version 3.0
Patch #: 28
Subject: close-on-exec problems on dup'ed file descriptors
Subject: not all yaccs are the same
Subject: defined(@array) and defined(%array) didn't work right
Subject: the NSIG hack didn't work right on Xenix
Subject: rename was busted on systems without rename system call
Subject: lowercase unquoted strings caused infinite loop
Subject: documented that you can't interpolate $) or $| in pattern
Subject: /x{m}/ didn't work right
Subject: t/io.fs had difficulties under AFS
Subject: t/op.stat had difficulties under AFS
Subject: shift/reduce count was off for a2p's Makefile
Subject: F_FREESP wasn't implemented the way I thought

Description:
	Certain systems, notable Ultrix, set the close-on-exec flag
	by default on dup'ed file descriptors.  This is anti-social
	when you're creating a new STDOUT.  The flag is now forced
	off for STDIN, STDOUT and STDERR.

	Some yaccs report 29 shift/reduce conflicts and 59 reduce/reduce
	conflicts, while other yaccs and bison report 27 and 61.  The
	Makefile now says to expect either thing.  I'm not sure if there's
	a bug lurking there somewhere.

	The defined(@array) and defined(%array) ended up defining
	the arrays they were trying to determine the status of.  Oops.

	Using the status of NSIG to determine whether <signal.h> had
	been included didn't work right on Xenix.  A fix seems to be
	beyond Configure at the moment, so we've got some OS dependent
	#ifdefs in there.

	There were some syntax errors in the new code to determine whether
	it is safe to emulate rename() with unlink/link/unlink.  Obviously
	heavily tested code...  :-)

	Patch 27 introduced the possibility of using identifiers as
	unquoted strings, but the code to warn against the use of
	totally lowercase identifiers looped infinitely.

	I documented that you can't interpolate $) or $| in pattern.
	It was actually implied under s///, but it should have been
	more explicit.

	Patterns with {m} rather than {m,n} didn't work right.

	Tests io.fs and op.stat had difficulties under AFS.  They now
	ignore the tests in question if they think they're running under
	/afs.

	The shift/reduce expectation message was off for a2p's Makefile.

Fix:	From rn, say "| patch -p -N -d DIR", where DIR is your perl source
	directory.  Outside of rn, say "cd DIR; patch -p -N <thisarticle".
	If you don't have the patch program, apply the following by hand,
	or get patch (version 2.0, latest patchlevel).

	After patching:
		Configure -d	# not necessary if you did it at pl27
		make depend	# not necessary if you did it at pl27
		make
		make test
		make install

	If patch indicates that patchlevel is the wrong version, you may need
	to apply one or more previous patches, or the patch may already
	have been applied.  See the patchlevel.h file to find out what has or
	has not been applied.  In any event, don't continue with the patch.

	If you are missing previous patches they can be obtained from me:

	Larry Wall
	lwall@jpl-devvax.jpl.nasa.gov

	If you send a mail message of the following form it will greatly speed
	processing:

	Subject: Command
	@SH mailpatch PATH perl 3.0 LIST
		   ^ note the c

	where PATH is a return path FROM ME TO YOU either in Internet notation,
	or in bang notation from some well-known host, and LIST is the number
	of one or more patches you need, separated by spaces, commas, and/or
	hyphens.  Saying 35- says everything from 35 to the end.


	You can also get the patches via anonymous FTP from
	jpl-devvax.jpl.nasa.gov (128.149.1.143).

Index: patchlevel.h
Prereq: 27
1c1
< #define PATCHLEVEL 27
---
> #define PATCHLEVEL 28

Index: Configure
Prereq: 3.0.1.8
*** Configure.old	Mon Aug 13 21:49:33 1990
--- Configure	Mon Aug 13 21:49:39 1990
***************
*** 8,14 ****
  # and edit it to reflect your system.  Some packages may include samples
  # of config.h for certain machines, so you might look for one of those.)
  #
! # $Header: Configure,v 3.0.1.8 90/08/09 01:47:24 lwall Locked $
  #
  # Yes, you may rip this off to use in other distribution packages.
  # (Note: this Configure script was generated automatically.  Rather than
--- 8,14 ----
  # and edit it to reflect your system.  Some packages may include samples
  # of config.h for certain machines, so you might look for one of those.)
  #
! # $Header: Configure,v 3.0.1.9 90/08/13 21:48:46 lwall Locked $
  #
  # Yes, you may rip this off to use in other distribution packages.
  # (Note: this Configure script was generated automatically.  Rather than
***************
*** 262,268 ****
  pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /usr/plx /usr/5bin /vol/local/bin /etc /usr/lib /lib /usr/local/lib /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/bin /bsd4.3/usr/ucb"
  d_newshome="/usr/NeWS"
  defvoidused=7
! libswanted="net_s net nsl_s nsl socket nm ndir ndbm dbm sun bsd BSD x c_s"
  inclwanted='/usr/netinclude /usr/include/sun /usr/include/bsd /usr/include/lan'
  : some greps do not return status, grrr.
  echo "grimblepritz" >grimble
--- 262,268 ----
  pth="/usr/ucb /bin /usr/bin /usr/local /usr/local/bin /usr/lbin /usr/plx /usr/5bin /vol/local/bin /etc /usr/lib /lib /usr/local/lib /sys5.3/bin /sys5.3/usr/bin /bsd4.3/bin /bsd4.3/usr/bin /bsd4.3/usr/ucb"
  d_newshome="/usr/NeWS"
  defvoidused=7
! libswanted="net_s net nsl_s nsl socket nm ndir ndbm dbm sun m bsd BSD x c_s"
  inclwanted='/usr/netinclude /usr/include/sun /usr/include/bsd /usr/include/lan'
  : some greps do not return status, grrr.
  echo "grimblepritz" >grimble

Index: Makefile.SH
Prereq: 3.0.1.7
*** Makefile.SH.old	Mon Aug 13 22:41:19 1990
--- Makefile.SH	Mon Aug 13 22:41:22 1990
***************
*** 25,33 ****
  
  echo "Extracting Makefile (with variable substitutions)"
  cat >Makefile <<!GROK!THIS!
! # $Header: Makefile.SH,v 3.0.1.7 90/08/09 02:19:56 lwall Locked $
  #
  # $Log:	Makefile.SH,v $
  # Revision 3.0.1.7  90/08/09  02:19:56  lwall
  # patch19: Configure now asks where you want to put scripts
  # patch19: Added support for linked-in C subroutines
--- 25,36 ----
  
  echo "Extracting Makefile (with variable substitutions)"
  cat >Makefile <<!GROK!THIS!
! # $Header: Makefile.SH,v 3.0.1.8 90/08/13 21:50:49 lwall Locked $
  #
  # $Log:	Makefile.SH,v $
+ # Revision 3.0.1.8  90/08/13  21:50:49  lwall
+ # patch28: not all yaccs are the same
+ # 
  # Revision 3.0.1.7  90/08/09  02:19:56  lwall
  # patch19: Configure now asks where you want to put scripts
  # patch19: Added support for linked-in C subroutines
***************
*** 285,291 ****
  	touch perly.h
  
  perl.c: perl.y
! 	@ echo Expect 29 shift/reduce and 59 reduce/reduce conflicts...
  	$(YACC) -d perl.y
  	mv y.tab.c perl.c
  	mv y.tab.h perly.h
--- 288,295 ----
  	touch perly.h
  
  perl.c: perl.y
! 	@ echo 'Expect either' 29 shift/reduce and 59 reduce/reduce conflicts...
! 	@ echo '           or' 27 shift/reduce and 61 reduce/reduce conflicts...
  	$(YACC) -d perl.y
  	mv y.tab.c perl.c
  	mv y.tab.h perly.h

Index: x2p/Makefile.SH
Prereq: 3.0.1.4
*** x2p/Makefile.SH.old	Mon Aug 13 22:45:25 1990
--- x2p/Makefile.SH	Mon Aug 13 22:45:26 1990
***************
*** 18,26 ****
  esac
  echo "Extracting x2p/Makefile (with variable substitutions)"
  cat >Makefile <<!GROK!THIS!
! # $Header: Makefile.SH,v 3.0.1.4 90/03/01 10:28:09 lwall Locked $
  #
  # $Log:	Makefile.SH,v $
  # Revision 3.0.1.4  90/03/01  10:28:09  lwall
  # patch9: a2p didn't allow logical expressions everywhere it should
  # 
--- 18,29 ----
  esac
  echo "Extracting x2p/Makefile (with variable substitutions)"
  cat >Makefile <<!GROK!THIS!
! # $Header: Makefile.SH,v 3.0.1.5 90/08/13 22:41:05 lwall Locked $
  #
  # $Log:	Makefile.SH,v $
+ # Revision 3.0.1.5  90/08/13  22:41:05  lwall
+ # patch28: shift/reduce count was off for a2p's Makefile
+ # 
  # Revision 3.0.1.4  90/03/01  10:28:09  lwall
  # patch9: a2p didn't allow logical expressions everywhere it should
  # 
***************
*** 98,104 ****
  	$(CC) $(LARGE) $(LDFLAGS) $(obj) a2p.o $(libs) -o a2p
  
  a2p.c: a2p.y
! 	@ echo Expect 232 shift/reduce conflicts...
  	$(YACC) a2p.y
  	mv y.tab.c a2p.c
  
--- 101,107 ----
  	$(CC) $(LARGE) $(LDFLAGS) $(obj) a2p.o $(libs) -o a2p
  
  a2p.c: a2p.y
! 	@ echo Expect 226 shift/reduce conflicts...
  	$(YACC) a2p.y
  	mv y.tab.c a2p.c
  

Index: array.c
Prereq: 3.0.1.1
*** array.c.old	Mon Aug 13 22:41:33 1990
--- array.c	Mon Aug 13 22:41:34 1990
***************
*** 1,4 ****
! /* $Header: array.c,v 3.0.1.1 89/11/17 15:02:52 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: array.c,v 3.0.1.2 90/08/13 21:52:20 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	array.c,v $
+  * Revision 3.0.1.2  90/08/13  21:52:20  lwall
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * 
   * Revision 3.0.1.1  89/11/17  15:02:52  lwall
   * patch5: nested foreach on same array didn't work
   * 
***************
*** 70,79 ****
  	    }
  	}
  	else {
! 	    newmax = key + ar->ary_max / 5;
! 	  resize:
! 	    Renew(ar->ary_alloc,newmax+1, STR*);
! 	    Zero(&ar->ary_alloc[ar->ary_max+1], newmax - ar->ary_max, STR*);
  	    ar->ary_array = ar->ary_alloc;
  	    ar->ary_max = newmax;
  	}
--- 73,88 ----
  	    }
  	}
  	else {
! 	    if (ar->ary_alloc) {
! 		newmax = key + ar->ary_max / 5;
! 	      resize:
! 		Renew(ar->ary_alloc,newmax+1, STR*);
! 		Zero(&ar->ary_alloc[ar->ary_max+1], newmax - ar->ary_max, STR*);
! 	    }
! 	    else {
! 		newmax = key < 4 ? 4 : key;
! 		Newz(2,ar->ary_alloc, newmax+1, STR*);
! 	    }
  	    ar->ary_array = ar->ary_alloc;
  	    ar->ary_max = newmax;
  	}
***************
*** 100,111 ****
      register ARRAY *ar;
  
      New(1,ar,1,ARRAY);
-     Newz(2,ar->ary_alloc,5,STR*);
-     ar->ary_array = ar->ary_alloc;
      ar->ary_magic = Str_new(7,0);
      str_magic(ar->ary_magic, stab, '#', Nullch, 0);
!     ar->ary_fill = -1;
!     ar->ary_max = 4;
      ar->ary_flags = ARF_REAL;
      return ar;
  }
--- 109,118 ----
      register ARRAY *ar;
  
      New(1,ar,1,ARRAY);
      ar->ary_magic = Str_new(7,0);
+     ar->ary_alloc = ar->ary_array = 0;
      str_magic(ar->ary_magic, stab, '#', Nullch, 0);
!     ar->ary_max = ar->ary_fill = -1;
      ar->ary_flags = ARF_REAL;
      return ar;
  }
***************
*** 136,142 ****
  {
      register int key;
  
!     if (!ar || !(ar->ary_flags & ARF_REAL))
  	return;
      if (key = ar->ary_array - ar->ary_alloc) {
  	ar->ary_max += key;
--- 143,149 ----
  {
      register int key;
  
!     if (!ar || !(ar->ary_flags & ARF_REAL) || ar->ary_max < 0)
  	return;
      if (key = ar->ary_array - ar->ary_alloc) {
  	ar->ary_max += key;

Index: doarg.c
Prereq: 3.0.1.6
*** doarg.c.old	Mon Aug 13 22:41:46 1990
--- doarg.c	Mon Aug 13 22:41:50 1990
***************
*** 1,4 ****
! /* $Header: doarg.c,v 3.0.1.6 90/08/09 02:48:38 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: doarg.c,v 3.0.1.7 90/08/13 22:14:15 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,15 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	doarg.c,v $
+  * Revision 3.0.1.7  90/08/13  22:14:15  lwall
+  * patch28: the NSIG hack didn't work on Xenix
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * 
   * Revision 3.0.1.6  90/08/09  02:48:38  lwall
   * patch19: fixed double include of <signal.h>
   * patch19: pack/unpack can now do native float and double
***************
*** 49,55 ****
  #include "EXTERN.h"
  #include "perl.h"
  
! #ifndef NSIG
  #include <signal.h>
  #endif
  
--- 53,59 ----
  #include "EXTERN.h"
  #include "perl.h"
  
! #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
  #include <signal.h>
  #endif
  
***************
*** 1155,1160 ****
--- 1159,1166 ----
      register int type;
      register int retarg = arglast[0] + 1;
      int retval;
+     ARRAY *ary;
+     HASH *hash;
  
      if ((arg[1].arg_type & A_MASK) != A_LEXPR)
  	fatal("Illegal argument to defined()");
***************
*** 1161,1176 ****
      arg = arg[1].arg_ptr.arg_arg;
      type = arg->arg_type;
  
!     if (type == O_ARRAY || type == O_LARRAY)
! 	retval = stab_xarray(arg[1].arg_ptr.arg_stab) != 0;
!     else if (type == O_HASH || type == O_LHASH)
! 	retval = stab_xhash(arg[1].arg_ptr.arg_stab) != 0;
!     else if (type == O_ASLICE || type == O_LASLICE)
! 	retval = stab_xarray(arg[1].arg_ptr.arg_stab) != 0;
!     else if (type == O_HSLICE || type == O_LHSLICE)
! 	retval = stab_xhash(arg[1].arg_ptr.arg_stab) != 0;
!     else if (type == O_SUBR || type == O_DBSUBR)
  	retval = stab_sub(arg[1].arg_ptr.arg_stab) != 0;
      else
  	retval = FALSE;
      str_numset(str,(double)retval);
--- 1167,1182 ----
      arg = arg[1].arg_ptr.arg_arg;
      type = arg->arg_type;
  
!     if (type == O_SUBR || type == O_DBSUBR)
  	retval = stab_sub(arg[1].arg_ptr.arg_stab) != 0;
+     else if (type == O_ARRAY || type == O_LARRAY ||
+ 	     type == O_ASLICE || type == O_LASLICE )
+ 	retval = ((ary = stab_xarray(arg[1].arg_ptr.arg_stab)) != 0
+ 	    && ary->ary_max >= 0 );
+     else if (type == O_HASH || type == O_LHASH ||
+ 	     type == O_HSLICE || type == O_LHSLICE )
+ 	retval = ((hash = stab_xhash(arg[1].arg_ptr.arg_stab)) != 0
+ 	    && hash->tbl_array);
      else
  	retval = FALSE;
      str_numset(str,(double)retval);

Index: doio.c
Prereq: 3.0.1.9
*** doio.c.old	Mon Aug 13 22:42:08 1990
--- doio.c	Mon Aug 13 22:42:12 1990
***************
*** 1,4 ****
! /* $Header: doio.c,v 3.0.1.9 90/08/09 02:56:19 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: doio.c,v 3.0.1.10 90/08/13 22:14:29 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,15 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	doio.c,v $
+  * Revision 3.0.1.10  90/08/13  22:14:29  lwall
+  * patch28: close-on-exec problems on dup'ed file descriptors
+  * patch28: F_FREESP wasn't implemented the way I thought
+  * 
   * Revision 3.0.1.9  90/08/09  02:56:19  lwall
   * patch19: various MSDOS and OS/2 patches folded in
   * patch19: prints now check error status better
***************
*** 67,72 ****
--- 71,80 ----
  #include <netdb.h>
  #endif
  
+ #if defined(SELECT) && (defined(M_UNIX) || defined(M_XENIX))
+ #include <sys/select.h>
+ #endif
+ 
  #ifdef I_PWD
  #include <pwd.h>
  #endif
***************
*** 237,244 ****
      }
  #if defined(FCNTL) && defined(F_SETFD)
      fd = fileno(fp);
!     if (fd >= 3)
! 	fcntl(fd,F_SETFD,1);
  #endif
      stio->ifp = fp;
      if (writing) {
--- 245,251 ----
      }
  #if defined(FCNTL) && defined(F_SETFD)
      fd = fileno(fp);
!     fcntl(fd,F_SETFD,fd >= 3);
  #endif
      stio->ifp = fp;
      if (writing) {
***************
*** 657,662 ****
--- 664,721 ----
      return sp;
  }
  
+ #if !defined(TRUNCATE) && !defined(CHSIZE) && defined(F_FREESP)
+ 	    /* code courtesy of Pim Zandbergen */
+ #define CHSIZE
+ 
+ int chsize(fd, length)
+ int fd;			/* file descriptor */
+ off_t length;		/* length to set file to */
+ {
+     extern long lseek();
+     struct flock fl;
+     struct stat filebuf;
+ 
+     if (fstat(fd, &filebuf) < 0)
+ 	return -1;
+ 
+     if (filebuf.st_size < length) {
+ 
+ 	/* extend file length */
+ 
+ 	if ((lseek(fd, (length - 1), 0)) < 0)
+ 	    return -1;
+ 
+ 	/* write a "0" byte */
+ 
+ 	if ((write(fd, "", 1)) != 1)
+ 	    return -1;
+     }
+     else {
+ 	/* truncate length */
+ 
+ 	fl.l_whence = 0;
+ 	fl.l_len = 0;
+ 	fl.l_start = length;
+ 	fl.l_type = F_WRLCK;    /* write lock on file space */
+ 
+ 	/*
+ 	* This relies on the UNDOCUMENTED F_FREESP argument to
+ 	* fcntl(2), which truncates the file so that it ends at the
+ 	* position indicated by fl.l_start.
+ 	*
+ 	* Will minor miracles never cease?
+ 	*/
+ 
+ 	if (fcntl(fd, F_FREESP, &fl) < 0)
+ 	    return -1;
+ 
+     }
+ 
+     return 0;
+ }
+ #endif /* F_FREESP */
+ 
  int
  do_truncate(str,arg,gimme,arglast)
  STR *str;
***************
*** 670,676 ****
      int result = 1;
      STAB *tmpstab;
  
! #if defined(TRUNCATE) || defined(CHSIZE) || defined(F_FREESP)
  #ifdef TRUNCATE
      if ((arg[1].arg_type & A_MASK) == A_WORD) {
  	tmpstab = arg[1].arg_ptr.arg_stab;
--- 729,735 ----
      int result = 1;
      STAB *tmpstab;
  
! #if defined(TRUNCATE) || defined(CHSIZE)
  #ifdef TRUNCATE
      if ((arg[1].arg_type & A_MASK) == A_WORD) {
  	tmpstab = arg[1].arg_ptr.arg_stab;
***************
*** 681,689 ****
      else if (truncate(str_get(ary->ary_array[sp]), len) < 0)
  	result = 0;
  #else
- #ifndef CHSIZE
- #define chsize(f,l) fcntl(f,F_FREESP,l)
- #endif
      if ((arg[1].arg_type & A_MASK) == A_WORD) {
  	tmpstab = arg[1].arg_ptr.arg_stab;
  	if (!stab_io(tmpstab) ||
--- 740,745 ----

Index: dolist.c
Prereq: 3.0.1.8
*** dolist.c.old	Mon Aug 13 22:42:28 1990
--- dolist.c	Mon Aug 13 22:42:34 1990
***************
*** 1,4 ****
! /* $Header: dolist.c,v 3.0.1.8 90/08/09 03:15:56 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: dolist.c,v 3.0.1.9 90/08/13 22:15:35 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	dolist.c,v $
+  * Revision 3.0.1.9  90/08/13  22:15:35  lwall
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * 
   * Revision 3.0.1.8  90/08/09  03:15:56  lwall
   * patch19: certain kinds of matching cause "panic: hint"
   * patch19: $' broke on embedded nulls
***************
*** 1109,1114 ****
--- 1112,1121 ----
      if (after < 0) {				/* not that much array */
  	length += after;			/* offset+length now in array */
  	after = 0;
+ 	if (!ary->ary_alloc) {
+ 	    afill(ary,0);
+ 	    afill(ary,-1);
+ 	}
      }
  
      /* At this point, sp .. max-1 is our new LIST */

Index: eval.c
Prereq: 3.0.1.7
*** eval.c.old	Mon Aug 13 22:42:52 1990
--- eval.c	Mon Aug 13 22:42:59 1990
***************
*** 1,4 ****
! /* $Header: eval.c,v 3.0.1.7 90/08/09 03:33:44 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: eval.c,v 3.0.1.8 90/08/13 22:17:14 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,16 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	eval.c,v $
+  * Revision 3.0.1.8  90/08/13  22:17:14  lwall
+  * patch28: the NSIG hack didn't work right on Xenix
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * patch28: rename was busted on systems without rename system call
+  * 
   * Revision 3.0.1.7  90/08/09  03:33:44  lwall
   * patch19: made ~ do vector operation on strings like &, | and ^
   * patch19: dbmopen(%name...) didn't work right
***************
*** 60,66 ****
  #include "EXTERN.h"
  #include "perl.h"
  
! #ifndef NSIG
  #include <signal.h>
  #endif
  
--- 65,71 ----
  #include "EXTERN.h"
  #include "perl.h"
  
! #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
  #include <signal.h>
  #endif
  
***************
*** 1539,1545 ****
  #ifdef RENAME
  	value = (double)(rename(tmps,tmps2) >= 0);
  #else
! 	if (same_dirent(tmps2, tmps)	/* can always rename to same name */
  	    anum = 1;
  	else {
  	    if (euid || stat(tmps2,&statbuf) < 0 ||
--- 1544,1550 ----
  #ifdef RENAME
  	value = (double)(rename(tmps,tmps2) >= 0);
  #else
! 	if (same_dirent(tmps2, tmps))	/* can always rename to same name */
  	    anum = 1;
  	else {
  	    if (euid || stat(tmps2,&statbuf) < 0 ||

Index: hash.c
Prereq: 3.0.1.4
*** hash.c.old	Mon Aug 13 22:43:10 1990
--- hash.c	Mon Aug 13 22:43:12 1990
***************
*** 1,4 ****
! /* $Header: hash.c,v 3.0.1.4 90/08/09 03:50:22 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: hash.c,v 3.0.1.5 90/08/13 22:18:27 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	hash.c,v $
+  * Revision 3.0.1.5  90/08/13  22:18:27  lwall
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * 
   * Revision 3.0.1.4  90/08/09  03:50:22  lwall
   * patch19: dbmopen(name, 'filename', undef) now refrains from creating
   * 
***************
*** 55,60 ****
--- 58,69 ----
  
      if (!tb)
  	return Nullstr;
+     if (!tb->tbl_array) {
+ 	if (lval)
+ 	    Newz(503,tb->tbl_array, tb->tbl_max + 1, HENT*);
+ 	else
+ 	    return Nullstr;
+     }
  
      /* The hash function we use on symbols has to be equal to the first
       * character when taken modulo 128, so that str_reset() can be implemented
***************
*** 141,146 ****
--- 150,158 ----
  	}
      }
  
+     if (!tb->tbl_array)
+ 	Newz(505,tb->tbl_array, tb->tbl_max + 1, HENT*);
+ 
      oentry = &(tb->tbl_array[hash & tb->tbl_max]);
      i = 1;
  
***************
*** 210,216 ****
      datum dkey;
  #endif
  
!     if (!tb)
  	return Nullstr;
      if (!tb->tbl_coeffsize)
  	hash = *key + 128 * key[1] + 128 * key[klen-1];
--- 222,228 ----
      datum dkey;
  #endif
  
!     if (!tb || !tb->tbl_array)
  	return Nullstr;
      if (!tb->tbl_coeffsize)
  	hash = *key + 128 * key[1] + 128 * key[klen-1];
***************
*** 314,320 ****
  	tb->tbl_max = 127;		/* it's a symbol table */
  	tb->tbl_dosplit = 128;		/* so never split */
      }
-     Newz(503,tb->tbl_array, tb->tbl_max + 1, HENT*);
      tb->tbl_fill = 0;
  #ifdef SOME_DBM
      tb->tbl_dbm = 0;
--- 326,331 ----
***************
*** 352,358 ****
      register HENT *hent;
      register HENT *ohent = Null(HENT*);
  
!     if (!tb)
  	return;
      (void)hiterinit(tb);
      while (hent = hiternext(tb)) {	/* concise but not very efficient */
--- 363,369 ----
      register HENT *hent;
      register HENT *ohent = Null(HENT*);
  
!     if (!tb || !tb->tbl_array)
  	return;
      (void)hiterinit(tb);
      while (hent = hiternext(tb)) {	/* concise but not very efficient */
***************
*** 438,443 ****
--- 449,456 ----
  	return entry;
      }
  #endif
+     if (!tb->tbl_array)
+ 	Newz(506,tb->tbl_array, tb->tbl_max + 1, HENT*);
      do {
  	if (entry)
  	    entry = entry->hent_next;

Index: t/io.fs
Prereq: 3.0
*** t/io.fs.old	Mon Aug 13 22:44:28 1990
--- t/io.fs	Mon Aug 13 22:44:29 1990
***************
*** 1,6 ****
  #!./perl
  
! # $Header: io.fs,v 3.0 89/10/18 15:26:20 lwall Locked $
  
  print "1..22\n";
  
--- 1,6 ----
  #!./perl
  
! # $Header: io.fs,v 3.0.1.1 90/08/13 22:31:17 lwall Locked $
  
  print "1..22\n";
  
***************
*** 61,68 ****
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
      $blksize,$blocks) = stat('b');
  if ($ino) {print "ok 17\n";} else {print "not ok 17\n";}
! if ($atime == 500000000 && $mtime == 500000001)
!     {print "ok 18\n";} else {print "not ok 18 $atime $mtime\n";}
  
  if ((unlink 'b') == 1) {print "ok 19\n";} else {print "not ok 19\n";}
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
--- 61,70 ----
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,
      $blksize,$blocks) = stat('b');
  if ($ino) {print "ok 17\n";} else {print "not ok 17\n";}
! if (($atime == 500000000 && $mtime == 500000001) || $wd =~ m#/afs/#)
!     {print "ok 18\n";}
! else
!     {print "not ok 18 $atime $mtime\n";}
  
  if ((unlink 'b') == 1) {print "ok 19\n";} else {print "not ok 19\n";}
  ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,

Index: t/op.stat
Prereq: 3.0.1.3
*** t/op.stat.old	Mon Aug 13 22:44:33 1990
--- t/op.stat	Mon Aug 13 22:44:35 1990
***************
*** 1,9 ****
  #!./perl
  
! # $Header: op.stat,v 3.0.1.3 90/02/28 18:36:51 lwall Locked $
  
  print "1..56\n";
  
  unlink "Op.stat.tmp";
  open(foo, ">Op.stat.tmp");
  
--- 1,11 ----
  #!./perl
  
! # $Header: op.stat,v 3.0.1.4 90/08/13 22:31:36 lwall Locked $
  
  print "1..56\n";
  
+ chop($cwd = `pwd`);
+ 
  unlink "Op.stat.tmp";
  open(foo, ">Op.stat.tmp");
  
***************
*** 23,29 ****
      $blksize,$blocks) = stat('Op.stat.tmp');
  
  if ($nlink == 2) {print "ok 3\n";} else {print "not ok 3\n";}
! if ($mtime && $mtime != $ctime) {print "ok 4\n";} else {print "not ok 4\n";}
  print "#4	:$mtime: != :$ctime:\n";
  
  `cp /dev/null Op.stat.tmp`;
--- 25,36 ----
      $blksize,$blocks) = stat('Op.stat.tmp');
  
  if ($nlink == 2) {print "ok 3\n";} else {print "not ok 3\n";}
! if (($mtime && $mtime != $ctime) || $cwd =~ m#/afs/#) {
!     print "ok 4\n";
! }
! else {
!     print "not ok 4\n";
! }
  print "#4	:$mtime: != :$ctime:\n";
  
  `cp /dev/null Op.stat.tmp`;
***************
*** 88,94 ****
  
  $cnt = $uid = 0;
  
- chop($cwd = `pwd`);
  die "Can't run op.stat test 35 without pwd working" unless $cwd;
  chdir '/usr/bin' || die "Can't cd to /usr/bin";
  while (<*>) {
--- 95,100 ----

Index: perl.y
Prereq: 3.0.1.7
*** perl.y.old	Mon Aug 13 22:43:21 1990
--- perl.y	Mon Aug 13 22:43:26 1990
***************
*** 1,4 ****
! /* $Header: perl.y,v 3.0.1.7 90/08/09 04:17:44 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: perl.y,v 3.0.1.8 90/08/13 22:19:55 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	perl.y,v $
+  * Revision 3.0.1.8  90/08/13  22:19:55  lwall
+  * patch28: lowercase unquoted strings caused infinite loop
+  * 
   * Revision 3.0.1.7  90/08/09  04:17:44  lwall
   * patch19: did preliminary work toward debugging packages and evals
   * patch19: added require operator
***************
*** 776,792 ****
   */
  
  bareword:	WORD
! 			{ char *s = $1;
  			    $$ = op_new(1);
  			    $$->arg_type = O_ITEM;
  			    $$[1].arg_type = A_SINGLE;
  			    $$[1].arg_ptr.arg_str = str_make($1,0);
! 			    while (*s) {
! 				if (!islower(*s))
! 				    break;
! 			    }
  			    if (dowarn && !*s)
! 				warn("\"%s\" may clash with future reserved word", $1);
  			}
  
  %% /* PROGRAM */
--- 779,794 ----
   */
  
  bareword:	WORD
! 			{ char *s;
  			    $$ = op_new(1);
  			    $$->arg_type = O_ITEM;
  			    $$[1].arg_type = A_SINGLE;
  			    $$[1].arg_ptr.arg_str = str_make($1,0);
! 			    for (s = $1; *s && islower(*s); s++) ;
  			    if (dowarn && !*s)
! 				warn(
! 				  "\"%s\" may clash with future reserved word",
! 				  $1 );
  			}
  
  %% /* PROGRAM */

Index: perl_man.2
Prereq: 3.0.1.7
*** perl_man.2.old	Mon Aug 13 22:43:40 1990
--- perl_man.2	Mon Aug 13 22:43:44 1990
***************
*** 1,7 ****
  ''' Beginning of part 2
! ''' $Header: perl_man.2,v 3.0.1.7 90/08/09 04:27:04 lwall Locked $
  '''
  ''' $Log:	perl_man.2,v $
  ''' Revision 3.0.1.7  90/08/09  04:27:04  lwall
  ''' patch19: added require operator
  ''' 
--- 1,10 ----
  ''' Beginning of part 2
! ''' $Header: perl_man.2,v 3.0.1.8 90/08/13 22:21:00 lwall Locked $
  '''
  ''' $Log:	perl_man.2,v $
+ ''' Revision 3.0.1.8  90/08/13  22:21:00  lwall
+ ''' patch28: documented that you can't interpolate $) or $| in pattern
+ ''' 
  ''' Revision 3.0.1.7  90/08/09  04:27:04  lwall
  ''' patch19: added require operator
  ''' 
***************
*** 1074,1079 ****
--- 1077,1083 ----
  done in a case-insensitive manner.
  PATTERN may contain references to scalar variables, which will be interpolated
  (and the pattern recompiled) every time the pattern search is evaluated.
+ (Note that $) and $| may not be interpolated because they look like end-of-string tests.)
  If you want such a pattern to be compiled only once, add an \*(L"o\*(R" after
  the trailing delimiter.
  This avoids expensive run-time recompilations, and

Index: perly.c
Prereq: 3.0.1.6
*** perly.c.old	Mon Aug 13 22:43:54 1990
--- perly.c	Mon Aug 13 22:43:58 1990
***************
*** 1,4 ****
! char rcsid[] = "$Header: perly.c,v 3.0.1.6 90/08/09 04:55:50 lwall Locked $\nPatch level: ###\n";
  /*
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! char rcsid[] = "$Header: perly.c,v 3.0.1.7 90/08/13 22:22:22 lwall Locked $\nPatch level: ###\n";
  /*
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	perly.c,v $
+  * Revision 3.0.1.7  90/08/13  22:22:22  lwall
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * 
   * Revision 3.0.1.6  90/08/09  04:55:50  lwall
   * patch19: added -x switch to extract script from input trash
   * patch19: Added -c switch to do compilation only
***************
*** 571,576 ****
--- 574,581 ----
      savestack = anew(Nullstab);		/* for saving non-local values */
      stack = anew(Nullstab);		/* for saving non-local values */
      stack->ary_flags = 0;		/* not a real array */
+     afill(stack,63); afill(stack,-1);	/* preextend stack */
+     afill(savestack,63); afill(savestack,-1);
  
      /* now parse the script */
  
***************
*** 845,851 ****
  		if (instr(tokenbuf,".h "))
  		    strcat(tokenbuf," (change .h to .ph maybe?)");
  		if (instr(tokenbuf,".ph "))
! 		    strcat(tokenbuf," (did you run makelib?)");
  		fatal("%s",tokenbuf);
  	    }
  	    if (gimme != G_ARRAY)
--- 850,856 ----
  		if (instr(tokenbuf,".h "))
  		    strcat(tokenbuf," (change .h to .ph maybe?)");
  		if (instr(tokenbuf,".ph "))
! 		    strcat(tokenbuf," (did you run h2ph?)");
  		fatal("%s",tokenbuf);
  	    }
  	    if (gimme != G_ARRAY)

Index: regcomp.c
Prereq: 3.0.1.4
*** regcomp.c.old	Mon Aug 13 22:44:08 1990
--- regcomp.c	Mon Aug 13 22:44:13 1990
***************
*** 7,15 ****
   * blame Henry for some of the lack of readability.
   */
  
! /* $Header: regcomp.c,v 3.0.1.4 90/08/09 05:05:33 lwall Locked $
   *
   * $Log:	regcomp.c,v $
   * Revision 3.0.1.4  90/08/09  05:05:33  lwall
   * patch19: sped up /x+y/ patterns greatly by not retrying on every x
   * patch19: inhibited backoff on patterns anchored to the end like /\s+$/
--- 7,18 ----
   * blame Henry for some of the lack of readability.
   */
  
! /* $Header: regcomp.c,v 3.0.1.5 90/08/13 22:23:29 lwall Locked $
   *
   * $Log:	regcomp.c,v $
+  * Revision 3.0.1.5  90/08/13  22:23:29  lwall
+  * patch28: /x{m}/ didn't work right
+  * 
   * Revision 3.0.1.4  90/08/09  05:05:33  lwall
   * patch19: sped up /x+y/ patterns greatly by not retrying on every x
   * patch19: inhibited backoff on patterns anchored to the end like /\s+$/
***************
*** 474,479 ****
--- 477,484 ----
  		    reginsert(CURLY, ret);
  		    if (*max == ',')
  			max++;
+ 		    else
+ 			max = regparse;
  		    tmp = atoi(max);
  		    if (tmp && tmp < iter)
  			fatal("Can't do {n,m} with n > m");

Index: stab.c
Prereq: 3.0.1.7
*** stab.c.old	Mon Aug 13 22:44:21 1990
--- stab.c	Mon Aug 13 22:44:24 1990
***************
*** 1,4 ****
! /* $Header: stab.c,v 3.0.1.7 90/08/09 05:17:48 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: stab.c,v 3.0.1.8 90/08/13 22:30:17 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	stab.c,v $
+  * Revision 3.0.1.8  90/08/13  22:30:17  lwall
+  * patch28: the NSIG hack didn't work right on Xenix
+  * 
   * Revision 3.0.1.7  90/08/09  05:17:48  lwall
   * patch19: fixed double include of <signal.h>
   * patch19: $' broke on embedded nulls
***************
*** 47,53 ****
  #include "EXTERN.h"
  #include "perl.h"
  
! #ifndef NSIG
  #include <signal.h>
  #endif
  
--- 50,56 ----
  #include "EXTERN.h"
  #include "perl.h"
  
! #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
  #include <signal.h>
  #endif
  

Index: toke.c
Prereq: 3.0.1.8
*** toke.c.old	Mon Aug 13 22:44:54 1990
--- toke.c	Mon Aug 13 22:45:02 1990
***************
*** 1,4 ****
! /* $Header: toke.c,v 3.0.1.8 90/08/09 05:39:58 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: toke.c,v 3.0.1.9 90/08/13 22:37:25 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,14 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	toke.c,v $
+  * Revision 3.0.1.9  90/08/13  22:37:25  lwall
+  * patch28: defined(@array) and defined(%array) didn't work right
+  * 
   * Revision 3.0.1.8  90/08/09  05:39:58  lwall
   * patch19: added require operator
   * patch19: added -x switch to extract script from input trash
***************
*** 424,430 ****
      case '%':
  	if (expectterm) {
  	    s = scanreg(s,bufend,tokenbuf);
! 	    yylval.stabval = stabent(tokenbuf,TRUE);
  	    TERM(HSH);
  	}
  	s++;
--- 427,433 ----
      case '%':
  	if (expectterm) {
  	    s = scanreg(s,bufend,tokenbuf);
! 	    yylval.stabval = hadd(stabent(tokenbuf,TRUE));
  	    TERM(HSH);
  	}
  	s++;

Index: util.c
Prereq: 3.0.1.6
*** util.c.old	Mon Aug 13 22:45:15 1990
--- util.c	Mon Aug 13 22:45:19 1990
***************
*** 1,4 ****
! /* $Header: util.c,v 3.0.1.6 90/08/09 05:44:55 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
--- 1,4 ----
! /* $Header: util.c,v 3.0.1.7 90/08/13 22:40:26 lwall Locked $
   *
   *    Copyright (c) 1989, Larry Wall
   *
***************
*** 6,11 ****
--- 6,15 ----
   *    as specified in the README file that comes with the perl 3.0 kit.
   *
   * $Log:	util.c,v $
+  * Revision 3.0.1.7  90/08/13  22:40:26  lwall
+  * patch28: the NSIG hack didn't work right on Xenix
+  * patch28: rename was busted on systems without rename system call
+  * 
   * Revision 3.0.1.6  90/08/09  05:44:55  lwall
   * patch19: fixed double include of <signal.h>
   * patch19: various MSDOS and OS/2 patches folded in
***************
*** 40,46 ****
  #include "EXTERN.h"
  #include "perl.h"
  
! #ifndef NSIG
  #include <signal.h>
  #endif
  
--- 44,50 ----
  #include "EXTERN.h"
  #include "perl.h"
  
! #if !defined(NSIG) || defined(M_UNIX) || defined(M_XENIX)
  #include <signal.h>
  #endif
  
***************
*** 1428,1440 ****
      if (strNE(a,b))
  	return FALSE;
      if (fa == a)
! 	strcpy(tmpbuf,".")
      else
  	strncpy(tmpbuf, a, fa - a);
      if (stat(tmpbuf, &tmpstatbuf1) < 0)
  	return FALSE;
      if (fb == b)
! 	strcpy(tmpbuf,".")
      else
  	strncpy(tmpbuf, b, fb - b);
      if (stat(tmpbuf, &tmpstatbuf2) < 0)
--- 1432,1444 ----
      if (strNE(a,b))
  	return FALSE;
      if (fa == a)
! 	strcpy(tmpbuf,".");
      else
  	strncpy(tmpbuf, a, fa - a);
      if (stat(tmpbuf, &tmpstatbuf1) < 0)
  	return FALSE;
      if (fb == b)
! 	strcpy(tmpbuf,".");
      else
  	strncpy(tmpbuf, b, fb - b);
      if (stat(tmpbuf, &tmpstatbuf2) < 0)

ronald@robobar.co.uk (Ronald S H Khoo) (08/15/90)

In article <15748@bfmny0.BFM.COM> tneff@bfmny0.BFM.COM (Tom Neff) writes:

>  * As someone pointed out, the perl.man files were silently changed to
> perl_man, so the patch bombs.  Growl.

Fix: run Configure between applying patch 18 and patch 19 :-)
     I think Larry did this for the MS-DOS people, right ?

print "Revenge of the Killer MS-DOS....." if $Dd_is_still_out_on_the_net ;
-- 
Eunet: Ronald.Khoo@robobar.Co.Uk  Phone: +44 81 991 1142  Fax: +44 81 998 8343
Paper: Robobar Ltd. 22 Wadsworth Road, Perivale, Middx., UB6 7JD ENGLAND.

jwas@PacBell.COM (Joe Wasik) (08/16/90)

In article <1990Aug15.090055.8421@robobar.co.uk> ronald@robobar.co.uk (Ronald S H Khoo) writes:
>In article <15748@bfmny0.BFM.COM> tneff@bfmny0.BFM.COM (Tom Neff) writes:
>
>>  * As someone pointed out, the perl.man files were silently changed to
>> perl_man, so the patch bombs.  Growl.
>
>Fix: run Configure between applying patch 18 and patch 19 :-)
>     I think Larry did this for the MS-DOS people, right ?

On my version, all I needed to do was edit the $Log line in the headers
of the manpages and change perl.man.[14] to perl_man.[14].

All patches (19-28) ran without any errors.  A previous posting about a
missing parenthesis in patch 22 is corrected in patch 28. Manual
intervention to fix this will cause an error when applying patch #28.

Just thought ya oughta know...

-- 
Joe Wasik - PacBell, 2600 Camino Ramon, 4e750, San Ramon, CA 94583  415-823-2422
jwas@PacBell.COM or {att,bellcore,sun,ames,pyramid}!pacbell!pbhyf!jwas
"Consitution, ... Shmoshtitution" -- Jesse Helms

allbery@NCoast.ORG (Brandon S. Allbery KB8JRR/KT) (08/16/90)

As quoted from <15748@bfmny0.BFM.COM> by tneff@bfmny0.BFM.COM (Tom Neff):
+---------------
|  * We don't HAVE an unexec() call, and the reference to it in eval.c is
| not #ifdef'd in any way, nor does Configure check for it.  So the make
| proceeds to bomb in 'ld' with an unresolved.  Configure should check its
+---------------

I think something's wrong on your end.  We don't have unexec on the Altos
1000, either, and I built PL28 this morning with no problems and it passed all
tests and is now installed.

++Brandon
-- 
Me: Brandon S. Allbery			    VHF: KB8JRR/KT on 220 (soon others)
Internet: allbery@NCoast.ORG		    Delphi: ALLBERY
uunet!usenet.ins.cwru.edu!ncoast!allbery    America OnLine: KB8JRR

tneff@bfmny0.BFM.COM (Tom Neff) (08/16/90)

In article <1990Aug15.230635.2040@NCoast.ORG> allbery@ncoast.ORG (Brandon S. Allbery KB8JRR/KT) writes:
>As quoted from <15748@bfmny0.BFM.COM> by tneff@bfmny0.BFM.COM (Tom Neff):
>+---------------
>|  * We don't HAVE an unexec() call, and the reference to it in eval.c is
>| not #ifdef'd in any way, nor does Configure check for it.  So the make
>| proceeds to bomb in 'ld' with an unresolved.  Configure should check its
>+---------------
>
>I think something's wrong on your end.  We don't have unexec on the Altos
>1000, either, and I built PL28 this morning with no problems and it passed all
>tests and is now installed.

Oh hell.  Mea culpa dudes.

I installed an unexec patch from Joe Buehler <jhpb@garage.att.com>
months ago and forgot about it.  The unexec() call isn't original
equipment, it was added by the patch.  After patching up to PL28, my
Makefile no longer had the hack to add unexec.c and so the reference
blew up.

print "Just another Perl loser,"
-- 
"We plan absentee ownership.  I'll stick to       `o'   Tom Neff
 building ships." -- George Steinbrenner, 1973    o"o   tneff@bfmny0.BFM.COM