🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.sources.bugs
5 messages
5 total messages Started by David J. MacKenzie Tue, 15 Sep 1992 05:34
patch 12u8 to patch, part 01 of 02
#337
Author: David J. MacKenzie
Date: Tue, 15 Sep 1992 05:34
1123 lines
35131 bytes
Below is patch 12u8 to version 2.0 of Larry Wall's patch program.  An
up to date tar file, as well as patches 12u through 12u8, are
available for anonymous ftp in the directory pub/gnu on
prep.ai.mit.edu [18.71.0.38], in the files patch-2.0.12u8.tar.Z and
patch.patch12u6 (etc.).  Also available is a version of patch that
conforms better to GNU standards, in the file patch-2.0.12g8.tar.Z.
Other archive sites will soon carry them as well, so try one nearest
you.

These versions of patch contain modifications made by the Free
Software Foundation.  Primarily they are to support the unified
context diff format that GNU diff can produce, and to support making
GNU Emacs-style backup files.  They also include fixes for some bugs.

There are two GNU variants of patch: one that retains Larry Wall's
interactive Configure script and has patchlevels starting with `12u';
and one that has a GNU-style non-interactive configure script and
accepts long-named options, and has parallel patchlevels starting with
`12g'.  Unlike the 12g variant, the 12u variant contains no copylefted
code, for the paranoid.  The two variants are otherwise the same.
They should be available from the same places.

The FSF is distributing patch independently because as of this
writing, Larry Wall has not released a new version of patch since
mid-1988.  I have heard that he has been too busy working on other
things, like Perl.

The major changes in this patch are:

* Improved detection of files that are locked under RCS or SCCS.  
* Reinstate the -E option to remove output files that are empty after
  being patched.
* Print the system error message when system calls fail.
* Added the -t option, similar to -f.
* Fixed various bugs and portability problems.

Please send bug reports for this version of patch to
bug-gnu-utils@prep.ai.mit.edu as well as to Larry Wall (lwall@netlabs.com).

This patch is about 56000 bytes long, so it is being posted in two parts.


Prereq: 12u7
diff -C2 -N patch-2.0.12u7/patchlevel.h patch-2.0.12u8/patchlevel.h
*** patch-2.0.12u7/patchlevel.h	Mon Jul  6 15:42:09 1992
--- patch-2.0.12u8/patchlevel.h	Tue Sep 15 00:36:28 1992
***************
*** 1 ****
! #define PATCHLEVEL "12u7"
--- 1 ----
! #define PATCHLEVEL "12u8"
diff -C2 -N patch-2.0.12u7/ChangeLog patch-2.0.12u8/ChangeLog
*** patch-2.0.12u7/ChangeLog	Mon Jul  6 15:42:24 1992
--- patch-2.0.12u8/ChangeLog	Tue Sep 15 00:36:32 1992
***************
*** 1,3 ****
--- 1,98 ----
+ Tue Sep 15 00:36:15 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* patchlevel.h: PATCHLEVEL 12u8.
+ 
+ Mon Sep 14 22:01:23 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* Makefile.SH: Add uninstall target.  Simplify install target.
+ 
+ 	* util.c (fatal, pfatal): Add some asterisks to make fatal
+ 	messages stand out more.
+ 
+ Tue Aug 25 22:13:36 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* patch.c (main, get_some_switches), common.h, inp.c (plan_a,
+ 	plan_b), pch.c (there_is_another_aptch): Add -t option,
+ 	similar to -f.
+ 
+ Mon Jul 27 11:27:07 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* inp.c (plan_a, util.c (fetchname): Use a macro to simplify code.
+ 	* common.h: Define SCCSDIFF and RCSDIFF.
+ 	* inp.c (plan_a): Use them to make sure it's safe to check out
+ 	the default RCS or SCCS version.
+ 	From Paul Eggert.
+ 
+ Wed Jul 22 14:37:08 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* patch.man: Use the standard comment syntax -- '\" -- instead
+ 	of '''.
+ 
+ Tue Jul 21 15:26:01 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* Configure: Add /etc /usr/lib /lib to pth.
+ 
+ Mon Jul 20 14:10:32 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* util.h: Declare basename.
+ 	* inp.c (plan_a), util.c (fetchname): Use it to isolate the
+ 	leading path when testing for RCS and SCCS files.
+ 
+ Sat Jul 11 18:03:26 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* Configure: Use the user's PATH and build pth from it.
+ 
+ Fri Jul 10 16:03:23 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* Configure: Change cc -S to cc -c and tr '[ - ]' '[\012-\012]'
+ 	to tr ' ' '\012' for AIX 3.2.
+ 	From chip@tct.com (Chip Salzenberg).
+ 
+ 	* util.c (makedirs): Only make the directories that don't exist.
+ 	From chip@tct.com (Chip Salzenberg).
+ 
+ Wed Jul  8 01:21:15 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* util.c (fatal, pfatal): Print "patch: " before message.
+ 	* pch.c, inp.c, patch.c, util.c: Remove "patch: " from the
+ 	callers that had it.
+ 
+ 	* util.c (pfatal): New function.
+ 	* util.h: Declare it and pfatal[1-4] macros.
+ 	* various files: Use it instead of fatal where appropriate.
+ 
+ 	* Configure: Make /usr/local/man/man1 the first choice for the
+ 	man pages.
+ 
+ 	* patch.c (main): Open ofp after checking for ed script.
+ 	Close ofp and rejfp before trying plan B.
+ 	From epang@sfu.ca (Eugene Pang).
+ 
+ 	* backupfile.h: Declackupfile.h: Declare get_version.
+ 
+ 	* Move decls of rindex and popen to common.h.
+ 
+ 	* common.h (myuid): New variable.
+ 	* patch.c (main): Initialize it.
+ 	* inp.c (myuid): Function removed.
+ 	(plan_a): Use the variable, not the function.
+ 
+ 	* patch.c: Reinstate -E option.
+ 
+ Tue Jul  7 23:19:28 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* inp.c (myuid): New function.
+ 	(plan_a): Call it.  Optimize stat calls.  Be smarter about
+ 	detecting checked out RCS and SCCS files.
+ 	From Paul Eggert (eggert@twinsun.com).
+ 
+ 	* inp.c, util.c, patch.c: Don't bother checking for stat() > 0.
+ 
  Mon Jul  6 13:01:52 1992  David J. MacKenzie  (djm@nutrimat.gnu.ai.mit.edu)
+ 
+ 	* version.c (version): Don't print the RCS stuff, since we're
+ 	not updating it regularly.
+ 
+ 	* patch.c (get_some_switches): Make the usage message more accurate.
  
  	* patchlevel.h: PATCHLEVEL 12u7.
diff -C2 -N patch-2.0.12u7/Configure patch-2.0.12u8/Configure
*** patch-2.0.12u7/Configure	Sat Mar 14 22:05:34 1992
--- patch-2.0.12u8/Configure	Wed Jul 22 14:51:32 1992
***************
*** 16,20 ****
  
  : sanity checks
! PATH='.:/bin:/usr/bin:/usr/local/bin:/usr/ucb:/usr/local:/usr/lbin:/etc:/usr/new:/usr/new/bin:/usr/nbin'
  export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh $0; kill $$)
  
--- 16,22 ----
  
  : sanity checks
! : the user has a better chance than we do of setting a reasonable PATH
! : but add some directories we need that are probably not there
! PATH=.:${PATH}:/etc:/usr/lib:/lib
  export PATH || (echo "OOPS, this isn't sh.  Desperation time.  I will feed myself to sh."; sh $0; kill $$)
  
***************
*** 147,151 ****
  attrlist="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX"
  attrlist="$attrlist mc68k m68k __STDC__"
! pth="/bin /usr/bin /usr/ccs/bin /usr/ucb /usr/local /usr/local/bin /usr/lbin /etc /usr/lib /lib"
  d_newshome="../../NeWS"
  defvoidused=7
--- 149,153 ----
  attrlist="$attrlist nsc32000 sinix xenix venix posix ansi M_XENIX"
  attrlist="$attrlist mc68k m68k __STDC__"
! pth=`echo $PATH | tr : ' '`
  d_newshome="../../NeWS"
  defvoidused=7
***************
*** 742,746 ****
  }
  EOCP
!     if cc -S -DTRY=7 try.c >.out 2>&1 ; then
  	voidflags=7
  	echo "It appears to support void fully."
--- 744,749 ----
  }
  EOCP
!     : Argh -- AIX 3.2 does not have cc -S!
!     if cc -c -DTRY=7 try.c >.out 2>&1 ; then
  	voidflags=7
  	echo "It appears to support void fully."
***************
*** 751,757 ****
      else
  	echo "Hmm, you compiler has some difficulty with void.  Checking further..."
! 	if cc -S -DTRY=1 try.c >/dev/null 2>&1 ; then
  	    echo "It supports 1..."
! 	    if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
  		voidflags=3
  		echo "And it supports 2 but not 4."
--- 754,760 ----
      else
  	echo "Hmm, you compiler has some difficulty with void.  Checking further..."
! 	if cc -c -DTRY=1 try.c >/dev/null 2>&1 ; then
  	    echo "It supports 1..."
! 	    if cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
  		voidflags=3
  		echo "And it supports 2 but not 4."
***************
*** 758,762 ****
  	    else
  		echo "It doesn't support 2..."
! 		if cc -S -DTRY=3 try.c >/dev/null 2>&1 ; then
  		    voidflags=5
  		    echo "But it supports 4."
--- 761,765 ----
  	    else
  		echo "It doesn't support 2..."
! 		if cc -c -DTRY=3 try.c >/dev/null 2>&1 ; then
  		    voidflags=5
  		    echo "But it supports 4."
***************
*** 869,873 ****
  : get C preprocessor symbols handy
  echo " "
! echo $attrlist | $tr '[ - ]' '[\012-\012]' >Cppsym.know
  $cat <<EOSS >Cppsym
  $startsh
--- 872,877 ----
  : get C preprocessor symbols handy
  echo " "
! : AIX 3.2 rejects tr '[ - ]' because the range endpoints are the same.
! echo $attrlist | $tr ' ' '\012' >Cppsym.know
  $cat <<EOSS >Cppsym
  $startsh
***************
*** 896,900 ****
  0) exit 1;;
  esac
! echo \$* | $tr '[ - ]' '[\012-\012]' | $sed -e 's/\(.*\)/\\
  #ifdef \1\\
  exit 0; _ _ _ _\1\\	 \1\\
--- 900,904 ----
  0) exit 1;;
  esac
! echo \$* | $tr ' ' '\012' | $sed -e 's/\(.*\)/\\
  #ifdef \1\\
  exit 0; _ _ _ _\1\\	 \1\\
***************
*** 1032,1036 ****
  case "$mansrc" in
  '')
!     dflt=`loc . /usr/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1 /usr/man/man1`
      ;;
  *)  dflt="$mansrc"
--- 1036,1040 ----
  case "$mansrc" in
  '')
!     dflt=`loc . /usr/man/man1 /usr/local/man/man1 /usr/man/mann /usr/man/local/man1 /usr/man/u_man/man1`
      ;;
  *)  dflt="$mansrc"
diff -C2 -N patch-2.0.12u7/Makefile.SH patch-2.0.12u8/Makefile.SH
*** patch-2.0.12u7/Makefile.SH	Mon Jul  6 14:28:10 1992
--- patch-2.0.12u8/Makefile.SH	Mon Sep 14 22:39:38 1992
***************
*** 66,78 ****
  install: patch
  	export PATH || exit 1
! 	- mv $(bin)/patch $(bin)/patch.old
! 	- if test `pwd` != $(bin); then cp $(public) $(bin); fi
! 	cd $(bin); chmod 755 $(public)
! 	- if test `pwd` != $(mansrc); then \
! for page in $(manpages); do \
! rm -f $(mansrc)/../cat$(manext)/`basename $$page .man`.$(manext); \
! cp $$page $(mansrc)/`basename $$page .man`.$(manext); \
! done; \
! fi
  
  clean:
--- 66,77 ----
  install: patch
  	export PATH || exit 1
! 	-mv $(bin)/patch $(bin)/patch.old
! 	cp patch $(bin)/patch
! 	chmod 755 $(bin)/patch
! 	-cp patch.man $(mansrc)/patch.$(manext)
! 
! uninstall:
! 	rm -f $(bin)/patch $(mansrc)/patch.$(manext)
! 	test ! -f $(bin)/patch.old || mv $(bin)/patch.old $(bin)/patch
  
  clean:
***************
*** 93,97 ****
  
  dist: $(DISTFILES)
! 	echo patch-2.0.`sed -e '/PATCHLEVEL/!d' -e 's/[^0-9u.]*\([0-9u.]*\).*/\1/' -e q patchlevel.h` > .fname
  	rm -rf `cat .fname`
  	mkdir `cat .fname`
--- 92,96 ----
  
  dist: $(DISTFILES)
! 	echo patch-2.0.`sed -e '/PATCHLEVEL/!d' -e 's/[^0-9]*\([0-9a-z.]*\).*/\1/' -e q patchlevel.h` > .fname
  	rm -rf `cat .fname`
  	mkdir `cat .fname`
diff -C2 -N patch-2.0.12u7/README patch-2.0.12u8/README
*** patch-2.0.12u7/README	Sat Jul  4 08:54:17 1992
--- patch-2.0.12u8/README	Tue Sep 15 01:18:33 1992
***************
*** 3,11 ****
  support the unified context diff format that GNU diff can produce, and
  to support making GNU Emacs-style backup files.  They also include
! fixes for some bugs.  The FSF is distributing this version of patch
! independently because as of this writing, Larry Wall has not released
! a new version of patch since mid-1988.  I have heard that he has been
! too busy working on other things, like Perl.
  
  Here is a wish list of some projects to improve patch:
  
--- 3,21 ----
  support the unified context diff format that GNU diff can produce, and
  to support making GNU Emacs-style backup files.  They also include
! fixes for some bugs.
  
+ There are two GNU variants of patch: this one, which retains Larry
+ Wall's interactive Configure script and has patchlevels starting with
+ `12u'; and another one that has a GNU-style non-interactive configure
+ script and accepts long-named options, and has patchlevels starting
+ with `12g'.  Unlike the 12g variant, the 12u variant contains no
+ copylefted code, for the paranoid.  The two variants are otherwise the
+ same.  They should be available from the same places.
+ 
+ The FSF is distributing this version of patch independently because as
+ of this writing, Larry Wall has not released a new version of patch
+ since mid-1988.  I have heard that he has been too busy working on
+ other things, like Perl.
+ 
  Here is a wish list of some projects to improve patch:
  
***************
*** 56,60 ****
  
  2)  Glance through config.h to make sure system dependencies are correct.
!     Most of them should have been taken care of by running the Configure script.
  
      If you have any additional changes to make to the C definitions, they
--- 66,71 ----
  
  2)  Glance through config.h to make sure system dependencies are correct.
!     Most of them should have been taken care of by running the
!     Configure script. 
  
      If you have any additional changes to make to the C definitions, they
***************
*** 83,100 ****
      I've probably changed my copy since the version you have.
  
!     Watch for patch patches in net.sources.bugs.  Patches will generally be
!     in a form usable by the patch program.  If you are just now bringing up
!     patch and aren't sure how many patches there are, write to me and I'll
!     send any you don't have.  Your current patch level is shown in patchlevel.h.
! 
! 
! NEW FEATURES IN THIS RELEASE
! 
! (Correct) support for 4.3bsd-style context diffs.
! Files can be created from scratch.
! You can specify a fuzz-factor for context matching.
! You can force patch to ask no questions.
! You can specify how much of the leading pathname to strip off filenames.
! Uses a Configure script for greater portability.
! You are now asked if you want to apply a reversed patch.
! No limit (apart from memory) on the size of hunks.
--- 94,98 ----
      I've probably changed my copy since the version you have.
  
!     Watch for patch patches in comp.sources.bugs.  Patches will generally be
!     in a form usable by the patch program.  Your current patch level
!     is shown in patchlevel.h.
diff -C2 -N patch-2.0.12u7/backupfile.c patch-2.0.12u8/backupfile.c
*** patch-2.0.12u7/backupfile.c	Wed Apr 29 10:19:40 1992
--- patch-2.0.12u8/backupfile.c	Wed Jul  8 18:48:29 1992
***************
*** 19,22 ****
--- 19,23 ----
  char *index ();
  char *rindex ();
+ char *malloc ();
  
  #ifdef DIRENT
***************
*** 41,46 ****
  #endif /* !USG */
  #endif /* !DIRENT */
- 
- char *malloc ();
  
  #ifndef isascii
--- 42,45 ----
diff -C2 -N patch-2.0.12u7/backupfile.h patch-2.0.12u8/backupfile.h
*** patch-2.0.12u7/backupfile.h	Sat Mar 14 12:31:52 1992
--- patch-2.0.12u8/backupfile.h	Wed Jul  8 18:49:27 1992
***************
*** 31,35 ****
--- 31,37 ----
  #ifdef __STDC__
  char *find_backup_file_name (char *file);
+ enum backup_type get_version (char *version);
  #else
  char *find_backup_file_name ();
+ enum backup_type get_version ();
  #endif
diff -C2 -N patch-2.0.12u7/common.h patch-2.0.12u8/common.h
*** patch-2.0.12u7/common.h	Fri Jul  3 23:48:36 1992
--- patch-2.0.12u8/common.h	Tue Aug 25 22:29:31 1992
***************
*** 50,59 ****
  
  /* AIX predefines these.  */
! #ifndef TRUE
! #define TRUE (1)
  #endif
! #ifndef FALSE
! #define FALSE (0)
  #endif
  
  #define MAXHUNKSIZE 100000		/* is this enough lines? */
--- 50,61 ----
  
  /* AIX predefines these.  */
! #ifdef TRUE
! #undef TRUE
  #endif
! #ifdef FALSE
! #undef FALSE
  #endif
+ #define TRUE (1)
+ #define FALSE (0)
  
  #define MAXHUNKSIZE 100000		/* is this enough lines? */
***************
*** 61,68 ****
--- 63,74 ----
  #define MAXLINELEN 1024
  #define BUFFERSIZE 1024
+ 
  #define SCCSPREFIX "s."
  #define GET "get -e %s"
+ #define SCCSDIFF "get -p %s | diff - %s >/dev/null"
+ 
  #define RCSSUFFIX ",v"
  #define CHECKOUT "co -l %s"
+ #define RCSDIFF "rcsdiff %s > /dev/null"
  
  #ifdef FLEXFILENAMES
***************
*** 108,111 ****
--- 114,119 ----
  EXT FILE *rejfp INIT(Nullfp);		/* reject file pointer */
  
+ EXT int myuid;				/* cache getuid return value */
+ 
  EXT bool using_plan_a INIT(TRUE);	/* try to keep everything in memory */
  EXT bool out_of_mem INIT(FALSE);	/* ran out of memory in plan a */
***************
*** 135,138 ****
--- 143,147 ----
  EXT LINENUM maxfuzz INIT(2);
  EXT bool force INIT(FALSE);
+ EXT bool batch INIT(FALSE);
  EXT bool verbose INIT(TRUE);
  EXT bool reverse INIT(FALSE);
***************
*** 157,168 ****
  EXT char *revision INIT(Nullch);	/* prerequisite revision, if any */
  
  char *malloc();
  char *realloc();
  char *strcpy();
  char *strcat();
! long atol();
  long lseek();
  char *mktemp();
! #if 0
  #ifde();
  char *strcat();
! long atol();
  long lseek();
  char *mktemp();
! #if 0
  #ifdef CHARSPRINTF
  char *sprintf();
--- 166,185 ----
  EXT char *revision INIT(Nullch);	/* prerequisite revision, if any */
  
+ #include <errno.h>
+ #ifndef errno
+ extern int errno;
+ #endif
+ 
+ FILE *popen();
  char *malloc();
  char *realloc();
+ long atol();
+ char *getenv();
  char *strcpy();
  char *strcat();
! char *rindex();
  long lseek();
  char *mktemp();
! #if 0				/* This can cause a prototype conflict.  */
  #ifdef CHARSPRINTF
  char *sprintf();
***************
*** 171,175 ****
  #endif
  #endif
- char *getenv();
  
  #if !defined(S_ISDIR) && defined(S_IFDIR)
--- 188,191 ----
diff -C2 -N patch-2.0.12u7/inp.c patch-2.0.12u8/inp.c
*** patch-2.0.12u7/inp.c	Mon Jul  6 13:05:31 1992
--- patch-2.0.12u8/inp.c	Tue Aug 25 22:27:57 1992
***************
*** 77,85 ****
  char *filename;
  {
!     int ifd;
      Reg1 char *s;
      Reg2 LINENUM iline;
  
!     if (ok_to_create_file && stat(filename, &filestat) < 0) {
  	if (verbose)
  	    say2("(Creating file %s...)\n",filename);
--- 77,87 ----
  char *filename;
  {
!     int ifd, statfailed;
      Reg1 char *s;
      Reg2 LINENUM iline;
+     char lbuf[MAXLINELEN];
  
!     statfailed = stat(filename, &filestat);
!     if (statfailed && ok_to_create_file) {
  	if (verbose)
  	    say2("(Creating file %s...)\n",filename);
***************
*** 86,113 ****
  	makedirs(filename, TRUE);
  	close(creat(filename, 0666));
      }
!     /* For read-only files, look for RCS or SCCS copies to check out.
!        co or get will fail if someone else has already locked the file.  */
!     if (stat(filename, &filestat) < 0 || access(filename, 2) < 0) {
! 	Sprintf(buf, "RCS/%s%s", filename, RCSSUFFIX);
! 	if (stat(buf, &filestat) >= 0 || stat(buf+4, &filestat) >= 0) {
  	    Sprintf(buf, CHECKOUT, filename);
! 	    if (verbose)
! 		say2("Attempting to check out %s from RCS.\n", filename);
! 	    if (system(buf) || stat(filename, &filestat))
! 		fatal2("Can't check out %s.\n", filename);
! 	}
! 	else {
! 	    Sprintf(buf+20, "SCCS/%s%s", SCCSPREFIX, filename);
! 	    if (stat(s=buf+20, &filestat) >= 0 ||
! 	      stat(s=buf+25, &filestat) >= 0) {
! 		Sprintf(buf, GET, s);
  		if (verbose)
! 		    say2("Attempting to get %s from SCCS.\n", filename);
! 		if (system(buf) || stat(filename, &filestat))
! 		    fatal2("Can't get %s.\n", filename);
  	    }
! 	    else if (stat(filename, &filestat) < 0)
! 		fatal2("Can't find %s.\n", filename);
  	}
      }
--- 88,147 ----
  	makedirs(filename, TRUE);
  	close(creat(filename, 0666));
+ 	statfailed = stat(filename, &filestat);
      }
!     /* For nonexistent or read-only files, look for RCS or SCCS versions.  */
!     if (statfailed
! 	/* No one can write to it.  */
! 	|| (filestat.st_mode & 0222) == 0
! 	/* I can't write to it.  */
! 	|| ((filestat.st_mode & 0022) == 0 && filestat.st_uid != myuid)) {
! 	struct stat cstat;
! 	char *cs = Nullch;
! 	char *filebase;
! 	int pathlen;
! 
! 	filebase = basename(filename);
! 	pathlen = filebase - filename;
! 
! 	/* Put any leading path into `s'.
! 	   Leave room in lbuf for the diff command.  */
! 	s = lbuf + 20;
! 	strncpy(s, filename, pathlen);
! 
! #define try(f, a1, a2) (Sprintf(s + pathlen, f, a1, a2), stat(s, &cstat) == 0)
! 	if (   try("RCS/%s%s", filebase, RCSSUFFIX)
! 	    || try("RCS/%s"  , filebase,         0)
! 	    || try(    "%s%s", filebase, RCSSUFFIX)) {
  	    Sprintf(buf, CHECKOUT, filename);
! 	    Sprintf(lbuf, RCSDIFF, filename);
! 	    cs = "RCS";
! 	} else if (   try("SCCS/%s%s", SCCSPREFIX, filebase)
! 		   || try(     "%s%s", SCCSPREFIX, filebase)) {
! 	    Sprintf(buf, GET, s);
! 	    Sprintf(lbuf, SCCSDIFF, s, filename);
! 	    cs = "SCCS";
! 	} else if (statfailed)
! 	    fatal2("can't find %s\n", filename);
! 	/* else we can't write to it but it's not under a version
! 	   control system, so just proceed.  */
! 	if (cs) {
! 	    if (!statfailed) {
! 		if ((filestat.st_mode & 0222) != 0)
! 		    /* The owner can write to it.  */
! 		    fatal3("file %s seems to be locked by somebody else under %s\n",
! 			   filename, cs);
! 		/* It might be checked out unlocked.  See if it's safe to
! 		   check out the default version locked.  */
  		if (verbose)
! 		    say3("Comparing file %s to default %s version...\n",
! 			 filename, cs);
! 		if (system(lbuf))
! 		    fatal3("can't check out file %s: differs from default %s version\n",
! 			   filename, cs);
  	    }
! 	    if (verbose)
! 		say3("Checking out file %s from %s...\n", filename, cs);
! 	    if (system(buf) || stat(filename, &filestat))
! 		fatal3("can't check out file %s from %s\n", filename, cs);
  	}
      }
***************
*** 114,118 ****
      filemode = filestat.st_mode;
      if (!S_ISREG(filemode))
! 	fatal2("%s is not a normal file--can't patch.\n", filename);
      i_size = filestat.st_size;
      if (out_of_mem) {
--- 148,152 ----
      filemode = filestat.st_mode;
      if (!S_ISREG(filemode))
! 	fatal2("%s is not a normal file--can't patch\n", filename);
      i_size = filestat.st_size;
      if (out_of_mem) {
***************
*** 130,134 ****
  	return FALSE;
      if ((ifd = open(filename, 0)) < 0)
! 	fatal2("Can't open file %s\n", filename);
  #ifndef lint
      if (read(ifd, i_womp, (int)i_size) != i_size) {
--- 164,168 ----
  	return FALSE;
      if ((ifd = open(filename, 0)) < 0)
! 	pfatal2("can't open file %s", filename);
  #ifndef lint
      if (read(ifd, i_womp, (int)i_size) != i_size) {
***************
*** 180,183 ****
--- 214,221 ----
  			revision);
  	    }
+ 	    else if (batch) {
+ 		fatal2(
+ "this file doesn't appear to be the %s version--aborting.\n", revision);
+ 	    }
  	    else {
  		ask2(
***************
*** 185,189 ****
  		    revision);
  	    if (*buf != 'y')
! 		fatal1("Aborted.\n");
  	    }
  	}
--- 223,227 ----
  		    revision);
  	    if (*buf != 'y')
! 		fatal1("aborted\n");
  	    }
  	}
***************
*** 208,214 ****
      using_plan_a = FALSE;
      if ((ifp = fopen(filename, "r")) == Nullfp)
! 	fatal2("Can't open file %s\n", filename);
      if ((tifd = creat(TMPINNAME, 0666)) < 0)
! 	fatal2("Can't open file %s\n", TMPINNAME);
      while (fgets(buf, sizeof buf, ifp) != Nullch) {
  	if (revision != Nullch && !found_revision && rev_in_string(buf))
--- 246,252 ----
      using_plan_a = FALSE;
      if ((ifp = fopen(filename, "r")) == Nullfp)
! 	pfatal2("can't open file %s", filename);
      if ((tifd = creat(TMPINNAME, 0666)) < 0)
! 	pfatal2("can't open file %s", TMPINNAME);
      while (fgets(buf, sizeof buf, ifp) != Nullch) {
  	if (revision != Nullch && !found_revision && rev_in_string(buf))
***************
*** 225,228 ****
--- 263,270 ----
  			revision);
  	    }
+ 	    else if (batch) {
+ 		fatal2(
+ "this file doesn't appear to be the %s version--aborting.\n", revision);
+ 	    }
  	    else {
  		ask2(
***************
*** 230,234 ****
  		    revision);
  		if (*buf != 'y')
! 		    fatal1("Aborted.\n");
  	    }
  	}
--- 272,276 ----
  		    revision);
  		if (*buf != 'y')
! 		    fatal1("aborted\n");
  	    }
  	}
***************
*** 243,251 ****
      tibuf[1] = malloc((MEM)(BUFFERSIZE + 1));
      if (tibuf[1] == Nullch)
! 	fatal1("Can't seem to get enough memory.\n");
      for (i=1; ; i++) {
  	if (! (i % lines_per_buf))	/* new block */
  	    if (write(tifd, tibuf[0], BUFFERSIZE) < BUFFERSIZE)
! 		fatal1("patch: can't write temp file.\n");
  	if (fgets(tibuf[0] + maxlen * (i%lines_per_buf), maxlen + 1, ifp)
  	  == Nullch) {
--- 285,293 ----
      tibuf[1] = malloc((MEM)(BUFFERSIZE + 1));
      if (tibuf[1] == Nullch)
! 	fatal1("out of memory\n");
      for (i=1; ; i++) {
  	if (! (i % lines_per_buf))	/* new block */
  	    if (write(tifd, tibuf[0], BUFFERSIZE) < BUFFERSIZE)
! 		pfatal1("can't write temp file");
  	if (fgets(tibuf[0] + maxlen * (i%lines_per_buf), maxlen + 1, ifp)
  	  == Nullch) {
***************
*** 253,257 ****
  	    if (i % lines_per_buf)
  		if (write(tifd, tibuf[0], BUFFERSIZE) < BUFFERSIZE)
! 		    fatal1("patch: can't write temp file.\n");
  	    break;
  	}
--- 295,299 ----
  	    if (i % lines_per_buf)
  		if (write(tifd, tibuf[0], BUFFERSIZE) < BUFFERSIZE)
! 		    pfatal1("can't write temp file");
  	    break;
  	}
***************
*** 260,264 ****
      Close(tifd);
      if ((tifd = open(TMPINNAME, 0)) < 0) {
! 	fatal2("Can't reopen file %s\n", TMPINNAME);
      }
  }
--- 302,306 ----
      Close(tifd);
      if ((tifd = open(TMPINNAME, 0)) < 0) {
! 	pfatal2("can't reopen file %s", TMPINNAME);
      }
  }
***************
*** 289,293 ****
  #endif
  	    if (read(tifd, tibuf[whichbuf], BUFFERSIZE) < 0)
! 		fatal2("Error reading tmp file %s.\n", TMPINNAME);
  	}
  	return tibuf[whichbuf] + (tireclen*offline);
--- 331,335 ----
  #endif
  	    if (read(tifd, tibuf[whichbuf], BUFFERSIZE) < 0)
! 		pfatal2("error reading tmp file %s", TMPINNAME);
  	}
  	return tibuf[whichbuf] + (tireclen*offline);
***************
*** 317,319 ****
      return FALSE;
  }
- 
--- 359,360 ----
diff -C2 -N patch-2.0.12u7/patch.c patch-2.0.12u8/patch.c
*** patch-2.0.12u7/patch.c	Sat Jul  4 02:33:40 1992
--- patch-2.0.12u8/patch.c	Tue Aug 25 22:30:28 1992
***************
*** 117,120 ****
--- 117,123 ----
  void my_exit();
  
+ /* TRUE if -E was specified on command line.  */
+ static int remove_empty_files = FALSE;
+ 
  /* TRUE if -R was specified on command line.  */
  static int reverse_flag_specified = FALSE;
***************
*** 122,125 ****
--- 125,129 ----
  /* Apply a set of diffs as appropriate. */
  
+ int
  main(argc,argv)
  int argc;
***************
*** 139,142 ****
--- 143,148 ----
  	filearg[i] = Nullch;
  
+     myuid = getuid();
+ 
      /* Cons up the names of the temporary files.  */
      {
***************
*** 172,178 ****
      }
  
-     /* parse switches */
-     Argc = argc;
-     Argv = argv;
      {
        char *v;
--- 178,181 ----
***************
*** 188,191 ****
--- 191,198 ----
  #endif
      }
+ 
+     /* parse switches */
+     Argc = argc;
+     Argv = argv;
      get_some_switches();
      
***************
*** 202,209 ****
  	    outname = savestr(filearg[0]);
      
- 	/* initialize the patched file */
- 	if (!skip_rest_of_patch)
- 	    init_output(TMPOUTNAME);
-     
  	/* for ed script just up and do it and exit */
  	if (diff_type == ED_DIFF) {
--- 209,212 ----
***************
*** 212,215 ****
--- 215,222 ----
  	}
      
+ 	/* initialize the patched file */
+ 	if (!skip_rest_of_patch)
+ 	    init_output(TMPOUTNAME);
+     
  	/* initialize reject file */
  	init_reject(TMPREJNAME);
***************
*** 247,251 ****
  			if (where == Nulline) {	    /* didn't find it swapped */
  			    if (!pch_swap())         /* put it back to normal */
! 				fatal1("Lost hunk on alloc error!\n");
  			    reverse = !reverse;
  			}
--- 254,258 ----
  			if (where == Nulline) {	    /* didn't find it swapped */
  			    if (!pch_swap())         /* put it back to normal */
! 				fatal1("lost hunk on alloc error!\n");
  			    reverse = !reverse;
  			}
***************
*** 252,256 ****
  			else if (noreverse) {
  			    if (!pch_swap())         /* put it back to normal */
! 				fatal1("Lost hunk on alloc error!\n");
  			    reverse = !reverse;
  			    say1(
--- 259,263 ----
  			else if (noreverse) {
  			    if (!pch_swap())         /* put it back to normal */
! 				fatal1("lost hunk on alloc error!\n");
  			    reverse = !reverse;
  			    say1(
***************
*** 258,261 ****
--- 265,275 ----
  			    skip_rest_of_patch = TRUE;
  			}
+ 			else if (batch) {
+ 			    if (verbose)
+ 				say3(
+ "%seversed (or previously applied) patch detected!  %s -R.",
+ 				reverse ? "R" : "Unr",
+ 				reverse ? "Assuming" : "Ignoring");
+ 			}
  			else {
  			    ask3(
***************
*** 270,274 ****
  				reverse = !reverse;
  				if (!pch_swap())  /* put it back to normal */
! 				    fatal1("Lost hunk on alloc error!\n");
  			    }
  			}
--- 284,288 ----
  				reverse = !reverse;
  				if (!pch_swap())  /* put it back to normal */
! 				    fatal1("lost hunk on alloc error!\n");
  			    }
  			}
***************
*** 314,317 ****
--- 328,337 ----
  	    Argv = Argv_last;
  	    say1("\n\nRan out of memory using Plan A--trying again...\n\n");
+ 	    if (ofp)
+ 	        Fclose(ofp);
+ 	    ofp = Nullfp;
+ 	    if (rejfp)
+ 	        Fclose(rejfp);
+ 	    rejfp = Nullfp;
  	    continue;
  	}
***************
*** 337,341 ****
  		chmod(outname, filemode);
  
! 	    if (stat(realout, &statbuf) >= 0 && statbuf.st_size == 0) {
  		if (verbose)
  		    say2("Removing %s (empty after patching).\n", realout);
--- 357,362 ----
  		chmod(outname, filemode);
  
! 	    if (remove_empty_files && stat(realout, &statbuf) == 0
! 		&& statbuf.st_size == 0) {
  		if (verbose)
  		    say2("Removing %s (empty after patching).\n", realout);
***************
*** 351,355 ****
  #ifndef FLEXFILENAMES
  		{
- 		    char *rindex();
  		    char *s = rindex(rejname,'/');
  
--- 372,375 ----
***************
*** 417,421 ****
  
      if (filec >= 2)
! 	fatal1("You may not change to a different patch file.\n");
  }
  
--- 437,441 ----
  
      if (filec >= 2)
! 	fatal1("you may not change to a different patch file\n");
  }
  
***************
*** 424,428 ****
  {
      if (!--Argc)
! 	fatal2("patch: missing argument after `%s'\n", *Argv);
      return *++Argv;
  }
--- 444,448 ----
  {
      if (!--Argc)
! 	fatal2("missing argument after `%s'\n", *Argv);
      return *++Argv;
  }
***************
*** 447,451 ****
  	if (*s != '-' || !s[1]) {
  	    if (filec == MAXFILEC)
! 		fatal1("patch: Too many file arguments.\n");
  	    filearg[filec++] = savestr(s);
  	}
--- 467,471 ----
  	if (*s != '-' || !s[1]) {
  	    if (filec == MAXFILEC)
! 		fatal1("too many file arguments\n");
  	    filearg[filec++] = savestr(s);
  	}
***************
*** 465,469 ****
  		    s = nextarg();
  		if (chdir(s) < 0)
! 		    fatal2("Can't cd to %s.\n", s);
  		break;
  	    case 'D':
--- 485,489 ----
  		    s = nextarg();
  		if (chdir(s) < 0)
! 		    pfatal2("can't cd to %s", s);
  		break;
  	    case 'D':
***************
*** 472,476 ****
  		    s = nextarg();
  		if (!isalpha(*s) && '_' != *s)
! 		    fatal1("Argument to -D not an identifier.\n");
  		Sprintf(if_defined, "#ifdef %s\n", s);
  		Sprintf(not_defined, "#ifndef %s\n", s);
--- 492,496 ----
  		    s = nextarg();
  		if (!isalpha(*s) && '_' != *s)
! 		    fatal1("argument to -D is not an identifier\n");
  		Sprintf(if_defined, "#ifdef %s\n", s);
  		Sprintf(not_defined, "#ifndef %s\n", s);
***************
*** 480,483 ****
--- 500,506 ----
  		diff_type = ED_DIFF;
  		break;
+ 	    case 'E':
+ 		remove_empty_files = TRUE;
+ 		break;
  	    case 'f':
  		force = TRUE;
***************
*** 518,521 ****
--- 541,547 ----
  		skip_rest_of_patch = TRUE;
  		break;
+ 	    case 't':
+ 		batch = TRUE;
+ 		break;
  	    case 'u':
  		diff_type = UNI_DIFF;
***************
*** 537,544 ****
  		fprintf(stderr, "patch: unrecognized option `%s'\n", Argv[0]);
  		fprintf(stderr, "\
! Usage: patch [-ceflnNRsSuv] [-b backup-ext] [-B backup-prefix] [-d directory]\n\
         [-D symbol] [-Fmax-fuzz] [-o out-file] [-p[strip-count]]\n\
!        [-r rej-name] [-V {numbered,existing,simple}] [origfile] [patchfile]\n\
!        [[+] [options] [origfile]...]\n");
  		my_exit(1);
  	    }
--- 563,571 ----
  		fprintf(stderr, "patch: unrecognized option `%s'\n", Argv[0]);
  		fprintf(stderr, "\
! Usage: patch [options] [origfile [patchfile]] [+ [options] [origfile]]...\n\
! Options:\n\
!        [-ceEflnNRsStuv] [-b backup-ext] [-B backup-prefix] [-d directory]\n\
         [-D symbol] [-Fmax-fuzz] [-o out-file] [-p[strip-count]]\n\
!        [-r rej-name] [-V {numbered,existing,simple}]\n");
  		my_exit(1);
  	    }
***************
*** 633,638 ****
  	    break;
  	default:
! 	    say1("Fatal internal error in abort_hunk().\n"); 
! 	    abort();
  	}
      }
--- 660,664 ----
  	    break;
  	default:
! 	    fatal1("fatal internal error in abort_hunk\n"); 
  	}
      }
***************
*** 767,771 ****
      ofp = fopen(name, "w");
      if (ofp == Nullfp)
! 	fatal2("patch: can't create %s.\n", name);
  }
  
--- 793,797 ----
      ofp = fopen(name, "w");
      if (ofp == Nullfp)
! 	pfatal2("can't create %s", name);
  }
  
***************
*** 778,782 ****
      rejfp = fopen(name, "w");
      if (rejfp == Nullfp)
! 	fatal2("patch: can't create %s.\n", name);
  }
  
--- 804,808 ----
      rejfp = fopen(name, "w");
      if (rejfp == Nullfp)
! 	pfatal2("can't create %s", name);
  }
  
***************
*** 790,794 ****
  
      if (R_last_frozen_line > lastline)
! 	fatal1("patch: misordered hunks! output will be garbled.\n");
      while (R_last_frozen_line < lastline) {
  	dump_line(++R_last_frozen_line);
--- 816,820 ----
  
      if (R_last_frozen_line > lastline)
! 	fatal1("misordered hunks! output would be garbled\n");
      while (R_last_frozen_line < lastline) {
  	dump_line(++R_last_frozen_line);
Re: patch 12u8 to patch, part 01 of 02
#340
Author: Michael Salmon
Date: Tue, 15 Sep 1992 10:25
49 lines
1817 bytes
In article <DJM.92Sep15013413@nutrimat.gnu.ai.mit.edu>, 
djm@gnu.ai.mit.edu (David J. MacKenzie) writes:
|> Below is patch 12u8 to version 2.0 of Larry Wall's patch program.  An
|> up to date tar file, as well as patches 12u through 12u8, are
|> available for anonymous ftp in the directory pub/gnu on
|> prep.ai.mit.edu [18.71.0.38], in the files patch-2.0.12u8.tar.Z and
|> patch.patch12u6 (etc.).  Also available is a version of patch that
|> conforms better to GNU standards, in the file patch-2.0.12g8.tar.Z.
|> Other archive sites will soon carry them as well, so try one nearest
|> you.
[...]
|> ***************
|> *** 157,168 ****
|>   EXT char *revision INIT(Nullch);	/* prerequisite revision, if any */
|>   
|>   char *malloc();
|>   char *realloc();
|>   char *strcpy();
|>   char *strcat();

*** From here

|> ! long atol();
|>   long lseek();
|>   char *mktemp();
|> ! #if 0
|>   #ifde();
|>   char *strcat();

*** To here are faulty and should be removed before patch will
*** accept this file.

|> ! long atol();
|>   long lseek();
|>   char *mktemp();
|> ! #if 0
|>   #ifdef CHARSPRINTF
|>   char *sprintf();

-- 

Michael Salmon

#include	<standard.disclaimer>
#include	<witty.saying>
#include	<fancy.pseudo.graphics>

Ericsson Telecom AB
Stockholm
Re: patch 12u8 to patch, part 01 of 02
#342
Author: David J. MacKenzie
Date: Tue, 15 Sep 1992 14:36
16 lines
985 bytes
In article <1992Sep15.102521.5151@ericsson.se> etxmesa@eos.ericsson.se (Michael Salmon) writes:

   *** From here

   |> ! long atol();
   |>   long lseek();
   |>   char *mktemp();
   |> ! #if 0
   |>   #ifde();
   |>   char *strcat();

   *** To here are faulty and should be removed before patch will
   *** accept this file.

Perhaps you'd modified your copy of 12u7?  I just applied the patch to
a fresh copy of 12u7 and didn't need to change it.
Re: patch 12u8 to patch, part 01 of 02
#343
Author: David J. MacKenzie
Date: Tue, 15 Sep 1992 14:59
9 lines
823 bytes
In article <DJM.92Sep15013413@nutrimat.gnu.ai.mit.edu> djm@gnu.ai.mit.edu (David J. MacKenzie) writes:

   Prereq: 12u7

That line should read:

   Prereq: "12u7"

Sorry about that.  I've corrected the patch.patch12u8 file on prep.ai.mit.edu.
Re: patch 12u8 to patch, part 01 of 02
#344
Author: Angus Duggan
Date: Tue, 15 Sep 1992 17:58
20 lines
1411 bytes
In article <DJM.92Sep15103627@nutrimat.gnu.ai.mit.edu>, djm@gnu.ai.mit.edu (David J. MacKenzie) writes:
> In article <1992Sep15.102521.5151@ericsson.se> etxmesa@eos.ericsson.se (Michael Salmon) writes:
> 
>    *** From here
...
>    *** To here are faulty and should be removed before patch will
>    *** accept this file.
> 
> Perhaps you'd modified your copy of 12u7?  I just applied the patch to
> a fresh copy of 12u7 and didn't need to change it.

No, there was a transmission error somewhere along the line and a small
section of the patch got duplicated; perhaps a repost is needed.

a.
-- 
Angus Duggan, Department of Computer Science,	| I'm pink, therefore I'm Spam.
University of Edinburgh, JCMB,			| JANET:  ajcd@uk.ac.ed.dcs
The King's Buildings, Mayfield Road,		| VOICE:  (UK) 031 650 5126
Edinburgh, EH9 3JZ, Scotland.	                | INET: ajcd@dcs.ed.ac.uk
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads